C到C++-创新互联
c与c++无异,true为1,false为0。当其他类型转换为布尔类型时,非零为真,0为假
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名申请、雅安服务器托管、营销软件、网站建设、峨边彝族网站维护、网站推广。2.const一般格式类型:
const 数据类型 常量名 = 常量值
tips:数据类型和const位置可以互换,常量定义后不可修改。
eg
#includeusing namespace std;
int main(void)
{//const int a; Error,常量必须初始化
const int a = 100;
//a = 200; Error,常量不能重新被赋值
int b = 22;
const int * p; //const在*左边,表示*p为常量,经由*p不能更改指针所指向的内容
p = &b;
//*p = 200; Error,常量不能重新被赋值
//int * const p2; Error,p2为常量,常量必须初始化
int * const p2 = &b; //const在*右边,表示p2为常量
//int c =100;
//p2 = &c; Error,常量不能重新被赋值
*p2 = 200;
cout<
3.#define#define一般格式:#define 宏名 字符串
#define类似与const,其具体差异如下:
1.#define 定义不指名具体类型,编译时前者做简单替换;后者做安全类型检查。
2.前者定义的常量在预编译时候替换,不分配内存;后者在编译时候分配内存
3.作用域不同,const定义的常变量的作用域为该变量的作用域范围。而#define定义的常量作用域为它的定义点到程序结束,当然也可以在某个地方用#undef取消
eg
#includeusing namespace std;
#define STR(a) #a
#define CAT(a,b) a##b
int main(void)
{int xy = 100;
cout<"ABCD" 转换为字符串,输出为ABCD
cout<xy 输出为100
return 0;
}
tips:#define存在副作用,
eg
//Effective C++ 3rd的一个例子。
#define CALL_WITH_MAX(a,b) f((a) >(b) ? (a) : (b))
a被累加1次 6 0 7
a被累加2次 6 20 20
int a = 5;
int b = 0;
CALL_WITH_MAX(++a, b); //a被累加二次
initial a = 5
result = 7
a_result = 7
CALL_WITH_MAX(++a, b+20); //a被累加一次
initial a = 7
result = 20
a_result = 8
分析:
上面的问题,不知道大家有没有看出来。
对于CALL_WITH_MAX(++a,b);
1、a首先加1 ,变成了6
2、再和b进行比较,结果是a大,最后返回的结果是(++a),又被加1 ,最后的结果是7
对于CALL_WITH_MAX(++a,b+20);
1、a首先加1 ,变成了8
2、再和b进行比较,结果是a大,最后返回的结果是b,此时的b为20,那么a只加了一次,a的结果是8
什么是内存对齐
(1)编译器为每个“数据单元”按排在某个合适的位置上。
(2)C、C++语言非常灵活,它允许你干涉“内存对齐”
为什么要对齐
性能原因:在对齐的地址上访问数据块。
如何对齐
(1)第一个数据成员放在offset为0的位置
(2)其它成员对齐至min(sizeof(member),#pragma pack所指定的值)的整数倍。
(3)整个结构体也要对齐,结构体总大小对齐至各个成员中大对齐数的整数倍。
eg
#includeusing namespace std;
#include#pragma pack(8)//可以修改vs2010以及linux g++的内存对齐数
struct Test
{char a;
double b;
char c;
};
#pragma pack()//取消内存对齐
//第一个成员与结构体变量的偏移量为0
//其它成员要对齐为某个数字(对齐数)的整数倍的地址
//对齐数取编译器预设的一个对齐整数与该成员大小的较小值
//结构体总大小为大对齐数的整数倍,若走vs2010默认对齐数的话,sizeof(Test)=24
//vs2010的对齐数可以取1,2,4,8,16,linux g++的话只能取1,2,4
int main(void)
{Test test;
//&test = &test.a;
char *p= (char*)&test;
//cout<
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章题目:C到C++-创新互联
网页链接:http://scyanting.com/article/ddesch.html