我认为声明为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核心常量表达式,其值是指具有静态存储时间的对象,要么是函数,
发布于 2014-06-30 11:29:27
首先,您可能是指A * const i (指向A的常量指针),而不是const A * i (指向const A的非常量指针)。
尽管如此,即使进行了这种修改,使用一个非常量表达式的值(例如在运行时计算的值)初始化const变量也是完全合法的。然而,在常量表达式中使用这样的变量是不可能的。如果尝试这样做,常量表达式定义就会启动,您就会得到一个错误。
发布于 2014-06-30 11:29:25
const变量的初始化不需要常量表达式。
https://stackoverflow.com/questions/24489060
复制相似问题