其实很好理解,当把值拷贝到auto修饰的变量的时候,通通忽略顶层const。但是当需要把变量作为别名绑定到其他变量上的时候,就不会省略底层const。
当我们不知道某个表达式的值的类型,但是需要用一个变量来存储这个值得时候,就用到auto类型说明符。
auto让编译器通过初始化的值来推算变量的类型。所以用auto定义变量时必须有初始值。
例如 auto a =10;//定义了一个整形变量a
auto的使用有以下需要注意的点:
当常量作为初始值的时候,auto一般忽略掉const(顶层const)。
例如:const int a=10;
auto b =a;此时的auto等价于int
当一个指针作为初始值时,auto一般忽略到顶层const(如果有),保留下底层const。
例如:
const int *const p=&a;
auto b=p;// 此时的auto等价于 const int *
如果想用auto定义一个引用时,初始值中的顶层const任然存在。
例如
auto &b=a;
还需注意:auto & b=20;是错误的应该定义为const auto &b=20;
当然我们可以手动的给auto加上顶层const;
顶层const:const修饰的是变量本身。
顶层const:const修饰的是变量指向的内容。