6
|
HolyBlackCat · 技术社区 · 4 年前 |
![]() |
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、无效)。 排除的案例包括:
|
![]() |
Robert E. Brown · 嵌套类的嵌套类的访问权限 6 年前 |
![]() |
YSC · 通过成员指针访问受保护的成员:这是黑客行为吗? 6 年前 |
![]() |
Swift - Friday Pie · 交换数学运算的阶 6 年前 |
![]() |
Acorn · Linux内核的\uu is\u constexpr宏 6 年前 |
![]() |
Acorn · 检测宏中的整数常量表达式 6 年前 |
![]() |
Petr Skocik · 兼容类型并忽略C类型系统中的顶级限定符 6 年前 |