C++11新特性:auto遇上const时的推导规则
当auto推导变量类型时,const修饰符会影响推导结果,我们具体看一下有哪些影响
1、普通变量
例如:
const int ci = 42;
auto a = ci; // a 的类型是 int (顶层 const 被忽略)
const auto ca = ci; // ca 的类型是 const int (顶层 const 被添加)
在这里,ci是一个const int,但是auto a = ci;推断出的类型仅仅是int,因为auto忽略了顶层const。
对于const auto ca = ci;,ca不仅继承了ci的类型int,还因为const的存在而成为了const int。
普通变量比较好理解。
2、指针 const就是指针比较复杂
例如
const int* pci = &ci;
auto p = pci; // p 的类型是 const int* (底层 const 被保留)
const auto cp = pci; // cp 的类型是 const int* const (顶层 const 被添加,底层 const 也被保留)
const int* pci = &ci;
通过上一篇文章,我们先看左边,左边没有,再看右边,右边是int,那说明const绑定的是int,也就是值不能改变,所以const修饰的是指针指向的对象而不是指针本身,所以这里的const是底层const。
auto p = pci;
auto推导会忽略顶层const,但是不会忽略底层const,所以p的类型是const int*,即它指向的是一个const int。
总结
1、auto推导类型时会忽略顶层const,但会保留底层const。
2、使用const auto时,const会被添加到推导出的类型上,如果初始化表达式中包含底层const,最后就是(顶层 const + 底层 const)。