C++11 auto类型说明符的使用

时间:2022-09-02 15:06:07

  编程的时候常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。然而做到这一点很难,有时候根本做不到。为了解决这个问题。C++11新标准引入了auto类型说明符,用它就 能让编译器帮我们去分析表达式所属的类型。auto通过编译器的类型来推算变量的类型。因此,auto定义的变量必须有初始值。

  使用auto的作用是很大的,它能让我们的代码更加流畅简易。

  尽管auto的定义看起来简单明了,但是有时编译器推断出来的auto类型有时候和初始值类型并不一样,所以编译器会适当的改变结果类型使其更符合初始规则。所以有几个细节需要我们注意:
 
1 使用引用类型给auto类型的初始值的时候,真正参与初始化的是引用对象的值。
     如int i = 0, &r = i;
     auto a = r;     //a是一个整数(r是i的别名,而i是一个整数)
 
2 auto一般会忽略顶层的const(顶层const表示指针本身是个常量,而顶层cosnt表示指针所指的对象是常量。也就是说顶层cosnt的这个概念作用于变量本身,所以const int i 也是一个顶层const;当执行对象拷贝的时候,不能让一个非指向常量的指针拷贝一个指向常量的指针,为了数据的安全,所以会检查底层const)
     比如 :
     const  int ci = i, &cr = ci;
     auto b = ci;    //b是一个整数(ci的顶层const特性被忽略掉了)
     auto c = cr;     //c也是一个整数(cr是ci 的别名,次本身是一个顶层const)
     auto d = &i;   //d是一个整型指针。
     auto e = &ci;  //e是一个指向整数常量的指针。(对常量对象取地址是一种低层的)
     
     如果我们希望推断出auto类型是一个顶层的const,则需要明确的指出,
     const auto f = ci;