C++11auto类型说明符

来源:互联网 发布:西门子冰箱知乎 编辑:程序博客网 时间:2024/05/17 18:23

C++11新标准引入了auto类型说明符,让编译器通过初始值推算变量的类型,所以,auto定义的变量必须有初始值。如:

auto item = val1 + val2;            //item初始化为val1和val2相加的结果

使用auto也可以在一条语句中声明多个变量,但是该语句中所有初始值的基本数据类型必须一样,因为一条语句中只能有一个基本数据类型。

auto i = 0, *p = &i;                //正确,i是整数,p是整型指针auto sz = 0, pi = 3.14;             //错误,类型不一致

复合类型与auto

编译器会适当的改变结果类型使其更符合初始化规则。

引用与auto

使用引用其实是使用引用的对象,特别是被用作初始值时,真正参与初始化的是引用对象的值,编译器以引用对象的类型作为auto的类型:

int i = 0. &r = i;auto a = r;                         //a是一个整数

const与auto

auto一般会忽略顶层const,而底层const会保留下来。当初始值时一个指向常量的指针时:

int i = 0;const int ci = i, &cr = ci;auto b = ci;                        //b是一个整数(ci的顶层const被忽略)auto c = cr;                        //c是一个整数(cr是ci的引用,使用ci作为初始化的值,ci本身是顶层const)auto d = &i;                        //d是一个整型指针,非常量整数i的地址auto e = &ci;                       //e是一个指向整数常量的指针,整数常量只能复制给指向整数常量的指针(底层const)

如果希望推断出的auto类型是顶层const,则必须在其前面加const:

const auto f = ci;                  //ci推断出的类型是int(忽略顶层const),f是const int

设置一个类型为auto的引用时,初始值中的顶层常量属性仍然保留:

auto &g = ci;                       //g是整型常量引用auto &h = 42;                       //错误,不能将非常量引用绑定到字面值const auto &j = 42;                 //正确,j为常量引用

目的均为使auto声明的变量可以被赋予等号右侧的初始值。
*和&均是从属于某个声明符,而非基本数据类型的一部分,初始值必须是同一类型:

auto k = ci, &l = i;                //k为int,l为整型引用,因为ci的顶层const被忽略auto &m = ci, *p = &ci;             //m为整型常量引用,p是指向整型常量的指针auto &n = i, *p2 = &ci;             //错误,n为非常量整型的引用,为int,p2为指向整型常量的指针,为const int
原创粉丝点击