1

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

#include <cstdlib> 
#include <iostream>

struct A{ };

const A *i = new A();

int main(){ }

它工作正常。

爱迪生

但我预计代码是无效的,因为它new A()是 anew-expression而不是constant expression. 实际上:秒。5.19/2 N3797:

条件表达式 e 是核心常量表达式,除非按照抽象机 (1.9) 的规则对 e 的求值将求值以下表达式之一:
[...]
— 新表达式 (5.3.4) ;

[...]

常量表达式要么是一个泛左值核心常量表达式,其值是指具有静态存储持续时间的对象或函数,

4

2 回答 2

4

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

尽管如此,即使进行了这种修改,const使用不是常量表达式的值(例如在运行时计算的值)初始化变量也是完全合法的。但是,不可能在常量表达式中使用这样的变量。如果你尝试这样做,常量表达式定义就会启动,你会得到一个错误。

于 2014-06-30T11:29:27.683 回答
0

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

于 2014-06-30T11:29:25.190 回答