麻煩我遇到了麻煩,同時初始化與常量類:運行與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