【发布时间】:2015-12-04 15:21:45
【问题描述】:
我不明白为什么由纯右值核心常量表达式引用的临时对象必须没有任何指针或引用,它指向或引用存储持续时间不是静态的对象,以便prvalue核心常量表达式为常量表达式;请参阅 N4296 [expr.const] 5.20\5。
我认为实现可以像这样重写该规则:
[expr.const] 5.20\5(修改)
核心常量表达式 e 是一个常量表达式,除非它 初始化一个对象,使其包含一个指针,该指针指向 具有非静态存储持续时间的对象。
如果不是,请有人解释一下原因吗?
【问题讨论】:
-
您的版本将允许指向具有静态存储持续时间的对象的指针,而该指针又包含指向具有动态存储持续时间的对象的指针。你的版本也不允许空指针。
-
@RaymondChen 嗯...但是空指针值根本不指向任何对象吗?而且我不明白为什么在您的示例中指向具有动态存储持续时间的对象的指针会成为问题。请解释一下。
-
我想我误解了你的问题。我以为您想将定义改写为与旧定义等效,但更简单。但是,听起来您想更改定义本身。
-
@RaymondChen 是的,它曾经是,现在仍然是一团糟......但我想到了你的空指针值等示例。有趣...
-
您可能应该指定您引用的标准版本,或引用原始措辞。在我这里的版本中没有 5.20。
标签: c++ language-lawyer