const auto *和const auto之间的区别?

时间:2016-04-12 03:16:22

标签: c++ c++11 pointers const auto

我有这段代码:

na.omit

为什么可以为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分配新地址?

1 个答案:

答案 0 :(得分:13)

b将推断为const int*,这意味着非const 指针指向const int,因此可以更改{b的值1}}本身。

c将推断为const int * const,这意味着指向const int const 指针,因此您无法更改{{1}的值本身。

<强>解释

对于这种情况,auto specifier将使用template argument deduction的规则。

  

一旦确定了初始值设定项的类型,编译器就会使用函数调用中的模板参数推导规则来确定将替换关键字auto的类型。

对于cconst auto *b = &a;&a,则const int*将替换为auto,然后int将为b 1}}。

对于const int*const auto c = &a;将替换为auto,然后const int*将为c。请注意,const int* constconstc本身的限定符。