Разница между 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
.