【发布时间】:2015-12-24 06:22:50
【问题描述】:
核心常量表达式的定义取决于常量表达式的概念,如要点 (2.7.1) 和 (2.9.1) 所示N4140 的。
§5.19/2:
条件表达式
e是核心常量表达式,除非 评估e,遵循抽象机(1.9)的规则, 将评估以下表达式之一:
...
(2.7.1) — 整数或枚举类型的非易失性左值 指的是具有先前初始化的非易失性 const 对象, 用常量表达式
初始化
...
(2.9.1) — 用 常量表达式 或
初始化
常量表达式的定义依赖于核心常量表达式的概念,如N4140的§5.19/4中所见:
常量表达式要么是一个左值核心常量 表达式,其值是指具有静态存储的对象 持续时间或函数,或prvalue 核心常量表达式 其值是一个对象,对于该对象及其子对象:
...
这似乎违背了数理逻辑的基本原理。
【问题讨论】:
-
到底是什么问题?
-
表达式可以包含其他表达式;这不是问题。
-
它不违反逻辑,因为你的代码中的表达式形成了一个树,而不是一个循环图
标签: c++ language-lawyer c++14 constant-expression