【发布时间】:2023-03-04 09:00:01
【问题描述】:
我一直知道标准要求取消引用 null 是 UB。然而,
(Link 1) 说
p = 0; *p;本质上不是错误。
并提供指向
的链接(Link 2) 说
当 p 为 null 时,*p 不是错误,除非将左值转换为左值
(我认为这是一个错字,可能应该是 lvalue is convert to an rvalue)
链接1也说
字符* p = 0;字符 *q = &*(p)
是“未定义”,我只能将其理解为定义明确的或至少实现定义的
语言律师能否对正在发生的事情提供权威解释?
【问题讨论】:
-
我不是语言律师,但我对链接的阅读是,在本身 UB 中取消引用空指针,仅使用值。是的,这似乎是一个错字,应该是左值到右值,因为这就是它在链接 1 中的引用方式。我认为这在静态成员的情况下是有意义的,因为只需要
operator*的静态类型,并且据我所见,link1 与此一致。 -
如果实现造成段错误,那真的是 UB 吗?我想不出有什么不一样的。
标签: c++ language-lawyer undefined-behavior