【1】简述#include<>和#include" "的区别
答:前者直接从编译器指定的路径处搜索;
后者在程序当前的目录进行搜索,如果没有搜索到再从编译器指定的路径出搜索。
【2】简述##与#在define中的作用
答:1.宏定义中#运算符将其后面的参数转换成字符串
2.宏定义中##运算符将前后的参数进行字符串替换
【3】简述assert断言的概念
答: assert用于在程序中的DEBUG版本中检测条件表达式,如果结果为假,则输出诊断信息并终止程序运行。实际上assert是一个带参数的宏,并非函数。一个良好的编程在调试结束后,在#include语句之前插入#define NDEBUG禁用 assert宏。
【4】简述i++和++i的区别
i++是先用后加,++i是先加后用。i++的开销要比++i大,因为i++产生了一个临时变量。
【5】C++类型转换
cout<<static_cast<double>(1)/2<<endl;
C++中结果为0.5
cout<<1/2<<endl;
C++中结果为0
所以类型转换必须显示声明,永远不要依赖隐式类型转换。
1.static_cast //内置数据类型转换,具有继承关系的指针和引用,不进行安全检查
2.dynamic_cast //动态类型转换,转换具有继承关系的 严格遵循对象类型安全检查 由下向上的转换是安全的,由上向下的转换是不安全不被允许的
3.const_cast //增加或者解除const限制,不是在本身解除而 是另一个开辟的(指针 引用 对象指针) 有效
4.reinterpret_cast 无关联类型可以进行强制类型转换