以动态方式持续初始化

时间:2014-06-30 11:25:38

标签: c++ constant-expression

我认为声明为const的变量仅适用于Static Initialization。我写了以下内容:

#include <cstdlib> 
#include <iostream>

struct A{ };

const A *i = new A();

int main(){ }

它工作正常。

Ideone

但我希望代码无效,因为new A()new-expression而不是constant expression。其实:  秒。 5.19 / 2 N3797:

  

条件表达式e是核心常量表达式,除非   评估e,遵循抽象机的规则(1.9),   将评估以下表达式之一:
  [...]
   - 一个新表达式(5.3.4);

     

[...]

  

常量表达式是glvalue核心常量表达式   其值是指具有静态存储持续时间的对象或者是指   功能,

2 个答案:

答案 0 :(得分:4)

首先,您可能需要A * const i(指向A的常量指针)而不是const A * i(指向const A的非常量指针)。

尽管如此,即使进行了这种修改,使用不是常量表达式的值(例如在运行时计算的值)初始化const变量也是完全合法的。但是,在常量表达式中不可能使用这样的变量。如果您尝试了这种方法,那么常量表达式定义就会出现,并且您会收到错误。

答案 1 :(得分:0)

const变量的初始化不需要常量表达式。