赋值时,auto
本身会去掉顶级(top level)的const/volatile
和引用,但是总有一些边边角角要注意的
auto a{3}; // int
但是
auto b = {3}; // std::initializer_list<int>
P.S. 在-std=c++11
并且gcc5/clang4.8之前的编译器版本下,auto a{3}
也是std::initializer_list
类型
auto c = (int){3};
这里c
是int
型,不过gcc和clang都会给出警告
有var
是int
型,那么
int* const cptr = &val;
auto d{cptr}; // int*
因为这里const
是直接修饰cptr
的,是top level的const
所以去掉了
什么算top level的const
呢,
We use the term top-level const to indicate that the pointer itself is a const
于是
int const* ptr = &val;
auto c{ptr}; // int const*
这里的const
就不是top level了,所以没有被去掉