本文主要是介绍C++11auto类型说明符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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
这篇关于C++11auto类型说明符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!