1.在语法层面上:引用不开空间,但是指针开空间
底层都是指针
2.涉及强制类型转换、+-*/这些的,编译器都会生成一个具有常性的临时变量来存储对应的值
如:
上边这个没问题,但是下边这个:
int& b = a;有问题
b是临时变量的别名
因为临时变量具有常性,所以b的本体不能被修改,但是由于b没有被const修饰,所以b可以被修改,这就是权限的放大。
注:权限可以缩小,平移,但不能放大。
改成这样就好了:
const int& b = a;(权限的平移)
3.没有NULL引用,但是有NULL指针
4.对于频繁调用的短小函数(非递归),建议在用inline修饰
注:inline仅仅是给编译器的一条建议,具体看编译器想不想实现
且
内联函数不能够声明和定义分离,因为内联函数没有地址
5.auto可以自动识别变量类型,使用方式类似于int,但不完全相同
6.在C++里边尽量用nullptr而不是NULL
因为NULL的实质是:
#define NULL 0
在某些情况下会出乎意料
例:
void func(int)
{
cout << "int" << endl;
}
void func(int*)
{
cout << "int*" << endl;
}
int main()
{
func(0);
func(NULL);
return 0;
}
输出两个int