为什么汽车说明书演绎"顶部和底部"来自&指针的等级const?

时间:2018-05-17 16:38:15

标签: c++ pointers visual-c++ auto

我的代码是

    const int *const ptrA = nullptr;
    auto *ptrB = &ptrA; 

我对const int *const ptrA的看法是:

  • *const)是"顶级const"
  • const int)是"低级const"

因此,ptrB必须是const int**类型。

我的问题是......

  

为什么ptrB不是const int**类型,如果"顶级const"被忽略了?

4 个答案:

答案 0 :(得分:1)

ptrB的类型为const int* const*

ptrA本身是const,指向const int。你得到它的地址,因此ptrB指向const指向const int的指针。

答案 1 :(得分:0)

顶层const确实在模板参数推导中被忽略(就像volatile),但你没有有任何顶级const限定符!

您有&ptrA指向const int *const的指针,因此const int *const*。没有顶级const了。这就是ptrB属于const int *const*类型的原因。

如果你有auto ptrB = ptrA;然后是的,顶级const将被忽略。

答案 2 :(得分:0)

因此对于auto *ptrB = ptrA;,您的看法是正确的(导致auto = const int*,而ptrAconst int* const),

&ptrA的类型为const int *const*,暂无const

答案 3 :(得分:0)

  

如果忽略“顶级常量”,为什么ptrB不是const int**类型?

如果您使用以下内容将被忽略:

auto *ptrB = ptrA; 

然后,ptrB的类型为const int*

但是,使用运算符的地址时,不会忽略顶级const

关于

  

因此,ptrB必须是const int**类型。

不,它的类型为const int* const*。如果类型声明为int const* const*,则更容易阅读。 ptrB是指向const的{​​{1}}指针的指针。

相关问题