C++数据类型 变量初始化规则 类型转换 可变参数宏
- 2015-02-10 21:16:00
- admin
- 原创 4796
一、数据类型
1、int在16位机器上是16位,在32位和64位机器上是32位;
2、long和size_t在32位机器上是32位,在64位机器上的64位程序中是64位;
3、long long长度是64位;
4、使用stdint.h的类型定义,可以增强程序的移植性;
5、C++11引入关键字auto,可以自动推导变量类型;
二、变量初始化规则 (按作用域)
1、未初始化的局部变量分配在栈上面,初始值随机;
2、全局初始化的变量存储在.data区域,用户数据进行填充;
3、全局未初始化的变量存储在.bbs区域,程序启动时填充零;
4、静态全局变量和静态局部变量在全局区分配空间,符号名在编译时转义,只能在文件或函数内可见;
三、变量初始化规则 (按场景)
1、初始化列表中成员变量名和参数名可以重名,隐式加上this指针;
2、类成员默认访问权限private,结构体成员默认访问权限public;
3、拷贝构造函数用一个对象生成另一个新对象,默认拷贝构造函数拷贝全体成员,语法示例Demo(const Demo& demo);
4、拷贝赋值函数只是修改一些成员值,默认拷贝赋值函数拷贝全体成员,语法示例Demo& operator =(const Demo& demo);
5、常量引用可以引用常量和函数返回值,通过创建临时变量实现;
四、数组、结构体、枚举初始化
1、数组初始化未指定值的部分初始化为零,比如char arr[1024] = {};
2、结构体初始化未指定值的部分初始化为零,比如Value value = {1,2},value.v1=1,value.v2=2,value.v3=0;
3、枚举初始化默认从零开始;
五、类型转换
1、C++多继承:一个对象存在多个虚函数表,这样每个基类都能找到需要调用的函数;
2、C++多继承:对象转换为基类,指针地址可能发生变化,指针指向对应基类的虚函数表;
3、T(expr),强制转换,等价于以下4种转换;
4、const_cast,增删const限定符;
5、static_cast,编译时类型检查;
6、dynamic_cast,运行时类型检查;
7、reinterpret_cast,不进行任何检查;
六、可变参数宏
1、使用...申明可变参数,使用__VA_ARGS__引用可变参数;
2、使用##__VA_ARGS__在可变参数为空时去除前导逗号;