1.为什么内敛函数可能导致链接错误?我们知道编译器对内敛函数是一种建议编译器会自动优化,判断当前内敛函数需不需要宏展开还是建立函数栈帧,内联函数更加适合调用次数多但是函数代码段短小的情况,一般在relase版本下才会对其经行内联,在debug版本下在vs2019上需要手动调节:
将这俩个开启打开反汇编就能够看到内敛函数的底层实现了 。
设置后:
所以内联函数如果声明定义分离为什么可能导致链接错误呢?原因如下:声明的头文件会在所有源文件中展开这样就没有对应的地址了,而在main函数中又调用该函数没有有效的地址合并符号表的时候就会出现链接错误。
2 .auto 关键字,auto关键字是自动推导变量的类型所以在定义的时候必须给它初始值,因为这样的特性他也不能做函数的参数和返回值,不能做返回值的原因是不利于查阅这个函数,使用者不能很好的了解这个函数,同时auto关键字也不能声明数组,
int main()
{
auto x=1;
int c =1;
auto * y =&c;//这样对y经行定义就右边就必须是地址;y的实际类型是指针
//进行取别名
auto & i = c;
return 0;
}
不能一行定义不同类型的变量
auto x =1,y=1.0;
3.基于范围的for循环,给定数组名自动推导范围,但必须是数组名不能是首元素地址
否则:
4.C++的NULL,c++中采用这类空指针:nullptr;这样更加不容易出错,在C++里面NULL和0 是等价的为什么呢,c++里面的NULL是宏
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else if
#define NULL (void * ) 0
#endif
#endif
当你传入NULL和0时会调用同一个函数