auto和decltype

1、用auto修饰符定义的变量根据其初始值由编译器自动判断变量类型,但会忽略顶层const,例如:const int ci;auto a = ci;此时a的类型是int,而不是const int,如果希望通过auto定义const类型,则需要特殊说明,const auto a = ci;此时a为const int。

2、用auto定义引用,原来的规则仍然适用,例如:auto &g = ci;正确,g指向常量ci,auto &h = 42;错误,不能为非常量引用绑定字面值,const auto &j = 42;正确,常量引用可以绑定字面值。

3、decltype与auto不同,decltype在判断表达式的类型时,保留引用部分,例如int &r = i;则decltype(r)的类型为int &,要想得到int类型需要decltype(i + 0)。

4、如果表达式的内容是解引用操作,则将得到引用类型,例如int *p = &i;则decltype(*p)的类型时int &。

5、decltype((variable))得到的类型永远是引用,而decltype(variable)只有在变量本身是引用的时候才得到引用类型。

posted @ 2022-12-01 14:09  许卡文迪  阅读(28)  评论(0编辑  收藏  举报