麻烦我遇到了麻烦,同时初始化与常量类:运行与constexpr
为什么用指针成员在同一类结果为错误的初始化? 没有使用“使用”类的错误出现!
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
};
@Morwenn:在构建'aptr'时,'a'已经构建并且具有有效地址。 – Mankarse 2013-05-14 09:36:04
我使用g ++初始化''Use'的'A'和'B' outisde,你会得到'抱歉,未实现:使用常量表达式中构造的对象的值'。 – Morwenn 2013-05-14 09:45:31
我认为你在这里有一个错字或UB:你正在取一个函数参数的地址,在'A'的Ctor结束后不再存在。也许你想'constexpr A(int&_a)'? – dyp 2013-05-14 11:09:43