Ich habe in meiner vorherigen Frage bereits gekannt (wird in C ++ gut definiert? Bei einer statischen Variablen, die eine std :: string enthält, scheinen die endgültigen Kopierinitialisierung, wenn ich einem Mitglied dieser Variablen im Lambda -Ausdruck zugewiesen werde, nicht an.
Code: Select all
#include
#include
struct T {
T(){
x = -2;
}
int x;
std::string o;
};
int main() {
static T t =[](){
T x;
t.x = 1;
return x;
}();
std::print("{}", t.x);
}
< /code>
Dieser Code erzeugt 1 für Clang und GCC. Entfernen der Zuordnung T.x = 1
oder das Mitglied std :: string o erzeugt das intuitive Ergebnis -2. STD :: STRING durch einen std :: vector erzeugt immer noch 1. HowVever, das Ersetzen durch einen sehr einfachen Nicht -Aggregat -Typ (ein leerer Typ mit einem benutzerdefinierten Standardkonstruktor, der nur etwas druckt) -2.>