Разница между const auto * и 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?

1 ответов


b будет выведено как const int*, что означает non-const указатель, указывающий на const int, поэтому можно изменить значение .

c будет выведено как const int * const, что означает const указатель, указывающий на const int, Так что вы не могли изменить значение .

объяснение

в этом случае авто описатель будет использовать правила для вывод аргумента шаблона.

после определения типа инициализатора компилятор определяет тип, который заменит ключевое слово auto, используя правила для вывода аргумента шаблона из вызова функции.

на const auto *b = &a; и &a is const int*, потом auto будет заменен как int, потом b будет const int*.

на const auto c = &a;, auto будет заменен как const int*, тогда c будет const int* const. Примечание const является квалификатором на на const auto c.