Auto和decltype的区别

Auto和decltype

auto 和 decltype都是用于自动类型推导的关键字,他们的使用方法如下:

cpp 复制代码
auto x = 10;

decltype(x) y;

区别

  1. 在使用方面,auto通过初始值推导类型,decltype通过表达式推导类型。这意味着,只有在初始化一个值的时候才能用auto类型,而decltype直接把类型提取出来可以用于任何地方(指定类模版的类型或者说定义却不初始化等等),还可以用于因此decltype要比auto灵活的多。
  2. 在对CV限定符的处理方面(const 和 volatile 关键字的统称:const 关键字用来表示数据是只读的,也就是不能被修改。volatile 和 const 是相反的,它用来表示数据是可变的、易变的,目的是不让 CPU 将数据缓存到寄存器,而是从原始的内存中读取),decltype会保留CV限定符,而auto是分情况:初始值是引用或指针类型的话就保留,其他类型直接去除CV。
  3. 在对引用类型的处理方面,auto会去掉引用类型,直接推导出其原始类型,而decltype则是会保留引用类型(这意味着auto x = y , y是某变量的引用,x是全新的变量而不是谁的引用)
  4. 但是auto也不是一无是处,它最大的优点就是简单