auto类型说明符
-
编绎器通过初始值推算变量的类型,因此auto定义的变量必须有初始值。
-
auto不返回引用类型
①引用类型初始化,参与初始化的是引用对象的值。
①编绎器以引用对象的数据类型作为auto的类型。 -
auto一般忽略顶层const,保留底层const,保留指针的底层const。
-
auto处理数组,ia为数组名,auto(ia)返回类型为指针,指向类型为数组元素类型。
decltype类型指示符
-
编绎器分析表达式并得到它的类型,不实际计算表达式的值。
①如果表达式为变量,返回变量类型(包括顶层const和引用类型)。
②如果不是变量则返回表达式结果对应的类型。
③如果表达式内容是解引用操作,同样返回引用类型。 -
引用一般作为绑定对象同义词出现,decltype处理是例外,可以返回一个引用类型。
①decltype((variable))(注意是双层括号)的结果永远是引用。
②decltype(variable)的结果只有当variable本身是一个引用时才是引用。 -
decltype处理数组,ia为数组名,decltype(ia)返回类型为数组,与ia相同数组类型。
-
decltype返回指向数组的指针。
①odd为数组名,decltype(odd) *arrptr (int i){};推断函数返回类型arrptr为指向数组指针。
②decltype处理函数名与数组名相同,函数名不可转换成指针,返回的是函数类型。
不同
-
auto忽略顶层const,不返回引用;decltype不忽略顶层const,可返回引用。
-
auto处理数组名返回指针;decltype处理数组名返回数组。
-
decltype处理函数名,返回函数类型。
-
decltype处理变量多重括号结果不同。
-
auto由初始值推断类型,必须初始化;deltype得到表达式类型,不计算表达式结果。