C++11/14新增了两个关键字:auto和decltype。它们可以推导出表达式的类型信息,是非常重要的特性,既可以极大地简化代码,更赋予了程序要原来只属于编译器的无上权力。
1,auto
auto可将其用在赋值表达式里声明变量,并在编译器自动推导出表达式的类型。
auto a = 32;
用法如上很简单,有几个注意的地方:
- 只能用于赋值语句里的类型推导,不能直接声明变量;
- 总是推断出值的类型(非引用);
- 允许使用“const/volatile/&/*”等修饰,从而得到新的类型;
- auto&&总是推断出引用类型
备注:当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;如果不使用valatile,则编译器将对所声明的语句进行优化。
在C++编程中应当尽量使用auto,不会有任何效率损失,而且带来了更好的安全性和可读性。
2,decltype
auto只能在赋值语句里推导类型,要想在任意场合下要是用decltype。decltype的形式很像函数调用:
decltype(expression)
decltype(x) d = x;
3,decltype(auto)
C++14增加了一种新的语法,decltype(auto)。
decltype(auto) 想= 6;