başı derde giriyor:sabitleri sahip bir sınıf başlatılırken ben derde constexpr
Neden bir hata içine aynı sınıf sonuçlarında bir üyesine bir işaretçi ile başlatma? Hata "Kullanım" sınıfını kullanmadan gelir!
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: "Uygun" oluşturulduğunda, "a" zaten kurulmuş ve geçerli bir adrese sahip. – Mankarse
"A" ve "B" yi "++" ile "out" işlevini baştan başlatabilirim, "Üzgünüz, hiç kullanılmamış": sabit bir ifadeyle oluşturulmuş nesnenin değerinin kullanılması. – Morwenn
Sanırım burada bir yazım hatası ya da UB var: Bir fonksiyon parametresinin adresini alıyorsunuz, artık “A” nın bitişi bittikten sonra mevcut değil. Belki de constexpr A (int & _a) 'istiyorsun? – dyp