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;,而&aconst int*,则auto将被替换为int,则b将是一个const int*.

对于const auto c = &a;auto将被替换为const int*,然后c将是const int* const。请注意 constc 本身在 const auto c.

上的限定符