我在初始化一个带有常量的类时遇到了麻烦:
为什么用指针指向同一个类中的成员的初始化会导致错误?如果没有使用类"Use“,错误就会出现!
class A
{
private:
int a;
const int* const aptr;
public:
constexpr A( int _a):
a(_a)
, aptr( &a) // why aptr could not be initialized?
{}
};
class Data { } d1;
class B
{
private:
Data* dptr1;
public:
constexpr B(Data* _p): dptr1( _p) {}
};
class Use
{
static constexpr A a{2}; // fail! error: field initializer is not constant
static constexpr B b{&d1}; // works
}; 发布于 2013-06-24 05:59:57
代码是有效的,Clang接受它;这似乎是一个g++错误。Use::a.a的地址是一个地址常量表达式,因为它的计算结果是具有静态存储持续时间的对象的地址,所以可以用它来初始化constexpr对象。
https://stackoverflow.com/questions/16539649
复制相似问题