自动获取类型的auto和decltype类型说明符

来源:互联网 发布:手机淘宝社区首页 编辑:程序博客网 时间:2024/04/30 04:37

auto: 让编译器通过初始值来推算变量的类型,要求auto定义的变量必须有初始值。

使用auto可以在一条语句中声明多个变量,但必须是同一数据类型的

auto i = 0,    *p = &i ;     // i是整数、p是整型指针

        auto m = 0,   n = 3.14 ;  // 不能这样定义,m和n数据类型不一致


        int i = 0 ;

const int ci = i ;

auto &n = i, *p = &ci ;   // 错误:i 的类型是 int 而 ci 的类型是 const int


auto一般忽略顶层const(指针本身是一个常量,而底层const表示指针所指的对象是一个常量)

int i = 0 ;

const int ci = i ;

auto b = ci ; // b是 int 类型 而不是 const int 类型

const auto d = ci ; // 此时d的类型是 const int 类型


decltype: 从表达式的类型推断出要定义的变量的类型

选择并返回操作数的数据类型,编译器分析表达式并得到它的类型,却不实际计算表达式的值:

decltype ( f() ) sum = x ; // sum的类型就是函数 f 的返回类型,但编译器并不实际调用函数 f


decltype返回变量的类型包括顶层const 和引用

const int ci = 0, &cj = ci ;

decltype(ci) x = 0 ;  // x的类型是 const int

decltype(cj) y = x;  // y的类型是 const int& , y 是x 的别名

decltype(cj) z ;     // 错误:z 是一个引用,必须初始化


切记:decltype((variable)) (双层括号)的结果永远是引用,而decltype(variable)结果只有当variable本身是引用是才是引用。

0 0
原创粉丝点击