ich in Schwierigkeiten geraten, während eine Klasse mit Konstanten initialisiert:läuft in Schwierigkeiten mit constexpr
Warum die Initialisierung mit einem Zeiger auf ein Element in der gleichen Klasse Ergebnisse in einen Fehler entdeckt? Der Fehler tritt auf, ohne die Klasse "Use" zu verwenden!
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: Zu dem Zeitpunkt, an dem 'aptr 'konstruiert wird, ist' a' bereits konstruiert und hat eine gültige Adresse. – Mankarse
Wenn Sie 'A' und' B' aus 'Use' mit g ++ initialisieren, erhalten Sie' sorry, unimplemented: Verwendung des Wertes des Objekts, das in einem konstanten Ausdruck konstruiert wird'. – Morwenn
Ich denke, Sie haben entweder einen Tippfehler oder UB: Sie nehmen die Adresse eines Funktionsparameters, der nicht mehr existiert, nachdem der Cort von 'A' beendet ist. Vielleicht willst du 'constexpr A (int & _a)'? – dyp