const auto * 和 const auto 之间的区别?
Difference between const auto * and const auto?
我有这个代码:
const int a = 10;
const auto *b = &a; //0x9ffe34
const auto c = &a; //0x9ffe34
int z = 20;
b = &z; //0x9ffe38
//c = &z; //[Error] assignment of read-only variable 'c'
为什么可以将新地址分配给 b
而不是 c
?
b
会被推导为const int*
,也就是说一个非常量指针指向const int
,所以改一下就好了b
本身的值。
c
将推导为 const int * const
,这意味着 const 指针指向 const int
,因此您无法更改c
本身的值。
说明
对于这种情况auto specifier will use the rules for template argument deduction。
Once the type of the initializer has been determined, the compiler determines the type that will replace the keyword auto using the rules for template argument deduction from a function call.
对于const auto *b = &a;
,而&a
是const int*
,则auto
将被替换为int
,则b
将是一个const int*
.
对于const auto c = &a;
,auto
将被替换为const int*
,然后c
将是const int* const
。请注意 const
是 c
本身在 const auto c
.
上的限定符
我有这个代码:
const int a = 10;
const auto *b = &a; //0x9ffe34
const auto c = &a; //0x9ffe34
int z = 20;
b = &z; //0x9ffe38
//c = &z; //[Error] assignment of read-only variable 'c'
为什么可以将新地址分配给 b
而不是 c
?
b
会被推导为const int*
,也就是说一个非常量指针指向const int
,所以改一下就好了b
本身的值。
c
将推导为 const int * const
,这意味着 const 指针指向 const int
,因此您无法更改c
本身的值。
说明
对于这种情况auto specifier will use the rules for template argument deduction。
Once the type of the initializer has been determined, the compiler determines the type that will replace the keyword auto using the rules for template argument deduction from a function call.
对于const auto *b = &a;
,而&a
是const int*
,则auto
将被替换为int
,则b
将是一个const int*
.
对于const auto c = &a;
,auto
将被替换为const int*
,然后c
将是const int* const
。请注意 const
是 c
本身在 const auto c
.