|
6
|
| HolyBlackCat · 技术社区 · 5 年前 |
|
|
1
6
在这里,我将参考C++20(草案)的措辞,因为 one relevant editorial issue 在C++17和C++20之间是固定的,也可以在C++20草案的HTML版本中引用特定的句子,但除此之外,与C++17相比没有什么新东西。 首先,指针值的定义 [basic.compound]/3 :
现在,让我们看看发生了什么
让我不要证明这一点
的意义
所以,
现在,演员阵容
演员阵容
即它仍然
指针指向
(对象)
[expr.static.cast]/13
覆盖外层
没有类型的对象
这意味着
所以,
为了指针运算的目的,对象
|
|
|
2
3
这个问题,另一个关于
一些海报似乎认为这意味着演员阵容的结果不能指向某种类型的物体
但我不认为这是合理的,而且(这是一个 荒谬还原论 论点),这一立场也意味着:
在我看来,这句话意味着强制转换的结果指向内存中与操作数相同的字节,这似乎是一种更明智的解释。(与指向其他字节相反,对于本句未涵盖的某些指针转换可能会发生这种情况)。说“值不变”并不意味着“类型不变”,例如,我们描述了从
此外,我想这可能对一些人有争议,但我认为这是公理,如果指针的值是对象的地址,那么指针 指向 除非标准明确排除这种情况。 这与[basic.compound]/3的文本是一致的,后者说的是相反的,即如果指针指向一个对象,那么它的值就是该对象的地址。 似乎没有任何其他明确的语句定义指针何时可以或不能指向对象,但basic.compound/3说所有指针必须是四种情况之一(指向对象、指向末尾、null、无效)。 排除的案例包括:
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |