为什么自动说明符从 &指针推断出"顶部和低"级别的常量?
Why auto specifier deduce "top and low" level const from an &pointer?
我的代码是
const int *const ptrA = nullptr;
auto *ptrB = &ptrA;
我从const int *const ptrA
中了解到的是:
- (
*const
)是"顶级常量" - (
const int
)是"低级常量">
因此,ptrB 必须是const int**
类型。
我的问题是...
如果忽略"顶级常量",为什么
ptrB
不是const int**
类型?
ptrB
的类型为const int* const*
。
ptrA
本身是常量,指向常量int。你得到它的地址,因此ptrB
指向常量指针到常量int。
顶级const
在模板参数推导中确实被忽略了(就像volatile
一样),但你没有任何顶级 const 限定符!
你有&ptrA
这是一个指向const int *const
的指针,所以是一个const int *const*
。不再有顶级const
。这就是为什么ptrB
属于const int *const*
型 .
如果你有auto ptrB = ptrA
;那么是的,顶级const
将被忽略。
如果忽略"顶级常量",为什么
ptrB
不是const int**
类型?
如果您使用以下内容,则会忽略它:
auto *ptrB = ptrA;
然后,ptrB
将是类型const int*
.
但是,当您使用运算符的地址时,不会忽略顶级const
。
关于
因此,
ptrB
必须是const int**
类型。
不,它是const int* const*
型。如果类型声明为int const* const*
,则会更容易阅读。ptrB
是指向const
的指针,指向const int
的指针。
所以对于auto *ptrB = ptrA;
,你的看法是正确的(导致auto
=const int*
而ptrA
是const int* const
),
但&ptrA
的类型是const int *const*
,没有const
可以丢弃。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- 类似枚举的计算常量
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我可以通过引用修改常量返回
- 如何创建长度由常量参数指定的数组
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 隐式常量/非常量运算符布尔
- 为什么自动说明符从 &指针推断出"顶部和低"级别的常量?
- C++ - 无法将顶部常量指针分配给另一个非常量指针