C++11特性:auto关键字(2)

如果初始化表达式是引用,则去除引用语义。

int a = 10; int &b = a; auto c = b;//c的类型为int而非int&(去除引用) auto &d = b;//此时c的类型才为int& c = 100;//a =10; d = 100;//a =100;

如果初始化表达式为const或volatile(或者两者兼有),则除去const/volatile语义。

const int a1 = 10; auto b1= a1; //b1的类型为int而非const int(去除const) const auto c1 = a1;//此时c1的类型为const int b1 = 100;//合法 c1 = 100;//非法

如果auto关键字带上&号,则不去除const语意。

const int a2 = 10; auto &b2 = a2;//因为auto带上&,故不去除const,b2类型为const int b2 = 10; //非法 这是因为如何去掉了const,则b2为a2的非const引用,通过b2可以改变a2的值,则显然是不合理的。

初始化表达式为数组时,auto关键字推导类型为指针。

int a3[3] = { 1, 2, 3 }; auto b3 = a3; cout << typeid(b3).name() << endl;

程序将输出

int *

若表达式为数组且auto带上&,则推导类型为数组类型。

int a7[3] = { 1, 2, 3 }; auto & b7 = a7; cout << typeid(b7).name() << endl;

程序输出

int [3]

函数或者模板参数不能被声明为auto

void func(auto a) //错误 { //... }

时刻要注意auto并不是一个真正的类型。
auto仅仅是一个占位符,它���不是一个真正的类型,不能使用一些以类型为操作数的操作符,如sizeof或者typeid。

cout << sizeof(auto) << endl;//错误 cout << typeid(auto).name() << endl;//错误

C++11特性:decltype关键字 

参考资料:《深入理解C++11》 pdf下载

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/be2db90b1ddca1a4f0162e84cff04fa7.html