目录
内联函数:
内联函数注意点:
auto:
atto注意点:
内联函数:
概念:
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调
用建立栈帧的开销,内联函数提程序运行的效率。所谓展开就是在调用处copy了一下内联函数里的内容。
所谓内联函数有点像宏那种东西,不能通过调用去看它代码过程,也就不方便调试了。
内联函数注意点:
1.内联函数没有地址,所以他不能声明和定义分开,需要一起实现,由于没有了地址,所以它也不能写递归函数了(这样做要报链接错误)。
2.如果内敛函数写太长的话,编译器也不会将它视为内联函数,忽略内联函数的特性,内联函数只是用户的建议具体实现不实现要看编译器。
3.内联函数是一种空间换时间的做法。
auto:
基本概念:
使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto
的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编
译期会将auto替换为变量实际的类型。
简单来说就是识别数数据类型
看代码
inline int add(int x, int y)
{
return x + y;
}
int main()
{
auto a = 10;
auto b = 'a';
auto c = "ac";
auto d = add;
cout << typeid(a).name()<< endl; //打印各自对应的数据类型名
cout << typeid(b).name() << endl;
cout << typeid(c).name() << endl;
cout << typeid(d).name() << endl;
return 0;
}
atto注意点:
1.它不能用来推导数组。
oid TestAuto()
{
int a[] = {1,2,3};
auto b[] = {4,5,6};
}
2.一行只能推导相同的数据类型:
void TestAuto()
{
auto a = 1, b = 2;
auto c = 3, d = 4.0; // 该行代码会编译失败,因为c和d的初始化表达式类型不同
}
3.auto在声明指针时加不加*号都无所谓,但声明引用必须加&。
nt main()
{
int x = 10;
auto a = &x;
auto* b = &x;
auto& c = x;
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
cout << typeid(c).name() << endl;
*a = 20;
*b = 30;
c = 40;
return 0;
}