我的代码是
const int *const ptrA = nullptr;
auto *ptrB = &ptrA;
我对const int *const ptrA
的看法是:
*const
)是"顶级const" const int
)是"低级const" 因此,ptrB必须是const int**
类型。
我的问题是......
为什么
ptrB
不是const int**
类型,如果"顶级const"被忽略了?
答案 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*
,而ptrA
是const 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}}指针的指针。