gpt4 book ai didi

c++ - 取消引用 null 并不总是 UB?

转载 作者:可可西里 更新时间:2023-11-01 17:56:36 24 4
gpt4 key购买 nike

我一直都知道标准要求取消引用 null 是 UB。然而,

(Link 1)

p = 0; *p; is not inherently an error.

并提供链接

(Link 2)

*p is not an error when p is null unless the lvalue is converted to an lvalue

(我认为这是一个打字错误,可能应该阅读lvalue is converted to an rvalue)

链接 1 也说

char* p = 0; char *q = &*(p)

“不是未定义”,我只能将其解读为明确定义或至少是实现定义

语言律师能否对发生的事情提供权威的解释?

最佳答案

我在 this answer 中探讨了通过空指针间接寻址的话题.简而言之,它本身确实定义明确,正如您在引用的核心问题中所阐述的那样。委员会使用了多年前提出的空左值的概念(但从未被采纳); *p 应该是这样一个空的左值,除非我们试图访问该左值后面的(不存在的)内存位置(例如,通过执行左值到右值的转换),所有其他操作均按预期运行。例如。 &*p 等同于 p,除非 p 无效。 (这也适用于数组末尾后的指针,这对于常见的惯用语 &arr[n] 是必需的)。

我也开始起草 paper for empty lvalues (这是 WIP,针对 N4640 的 rebase 尚未完成),因此我们有可能在稍后阶段看到更多此类内容。

关于c++ - 取消引用 null 并不总是 UB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43533262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com