C到C++-创新互联

1.bool类型

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

4.结构体内存对齐

什么是内存对齐
(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://azwzsj.com/article/ddesch.html