biegnę w kłopoty podczas inicjalizacji klasy ze stałych:uruchomiony w kłopoty z constexpr
Dlaczego inicjalizacji z wskaźnik do członka w tych samych wyników klasę na błąd? Błąd pojawia się bez użycia klasy "Użyj"!
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: Do czasu budowania 'aptr'' a' został już skonstruowany i ma poprawny adres. – Mankarse
Inicjalizuję 'A' i' B' poza 'Use' z g ++, otrzymujesz' sorry, unimplemented: użycie wartości konstruowanego obiektu w stałym wyrażeniu'. – Morwenn
Myślę, że albo masz tu literówkę, albo UB: Podajesz adres parametru funkcji, który już nie istnieje po zakończeniu ctorka "A". Może chcesz "constexpr A (int & _a)"? – dyp