Warum Zuweisen an Mitglieder eines statischen Objekts, das eine STD :: String enthält, verhindern die Initialisierung?C++

Programme in C++. Entwicklerforum
Anonymous
 Warum Zuweisen an Mitglieder eines statischen Objekts, das eine STD :: String enthält, verhindern die Initialisierung?

Post by Anonymous »

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.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post