C++11新特性之autodecltype

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++11新特性之autodecltype相关的知识,希望对你有一定的参考价值。

C++11新特性之auto、decltype

1.类型推导

auto

根据等号右边类型推导变量的类型。

static auto b= 1; 会报错。因为类只能初始化静态常量(static const)

  • auto的使用必须马上初始化,否则无法推导出类型
  • auto在一行定义多个变量时,各个变量的推导不能产生二义性,否则编译失败
  • auto不能用作函数参数
  • 在类中auto不能用作非静态成员常量
  • auto不能定义数组,可以定义指针
  • auto无法推导出模板参数

decltype

上面介绍auto用于推导变量类型,而decltype则用于推导表达式类型,这里只用于编译器分析表达式的类型,表达式实际不会进行运算,上代码:

int a = 0, b = 0;
decltype(a + b) c = 0; // c是int,因为(a+b)返回一个右值
decltype(a += b) d = c;// d是int&,因为(a+=b)返回一个左值

d = 20;
cout << "c " << c << endl; // 输出c 20

auto和decltype结合

以上是关于C++11新特性之autodecltype的主要内容,如果未能解决你的问题,请参考以下文章

ECMA Script 6新特性之解构赋值

c++11 新特性之 autokeyword

C++11新特性之move与forward

深入浅出之C++11新特性

c++11新特性之引用折叠

C++11新特性之十:enable_shared_from_this