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 は、抽象マシン (1.9) の規則に従って e を評価した場合に、次の式のいずれかが評価されない限り、コア定数式です。
[...]
— 新しい式 (5.3.4) ;[...]
と
定数式は、値が静的ストレージ期間を持つオブジェクトまたは関数を参照する glvalue コア定数式のいずれかです。