我认为声明为const
的变量仅适用于Static Initialization
。我写了以下内容:
#include <cstdlib>
#include <iostream>
struct A{ };
const A *i = new A();
int main(){ }
它工作正常。
但我希望代码无效,因为new A()
是new-expression
而不是constant expression
。其实:
秒。 5.19 / 2 N3797:
条件表达式e是核心常量表达式,除非 评估e,遵循抽象机的规则(1.9), 将评估以下表达式之一:
[...]
- 一个新表达式(5.3.4);[...]
和
常量表达式是glvalue核心常量表达式 其值是指具有静态存储持续时间的对象或者是指 功能,
答案 0 :(得分:4)
首先,您可能需要A * const i
(指向A
的常量指针)而不是const A * i
(指向const A
的非常量指针)。
尽管如此,即使进行了这种修改,使用不是常量表达式的值(例如在运行时计算的值)初始化const
变量也是完全合法的。但是,在常量表达式中不可能使用这样的变量。如果您尝试了这种方法,那么常量表达式定义就会出现,并且您会收到错误。
答案 1 :(得分:0)
const
变量的初始化不需要常量表达式。