Laut diesem Artikel sollte dieser Codeausschnitt funktionieren:
Code: Select all
struct Something
{
int x;
int y {}; // default initializer with default value
int z { 2 }; // default initializer with specific value
};
int main()
{
Something s1;
Something s2 { 5, 6, 7 }; // this cause error C2440 in MSVC14.0
Something s3 {};
return 0;
}
Code: Select all
..\TestAnything\main.cpp(11): error C2440: 'initializing': cannot convert from 'initializer list' to 'Something'
..\TestAnything\main.cpp(11): note: No constructor could take the source type, or constructor overload resolution was ambiguous
Code: Select all
struct Something
{
int x;
int y; // no default initializer
int z; // no default initializer
};
int main()
{
Something s1;
Something s2 { 5, 6, 7 }; // this works fine
Something s3 {};
return 0;
}
Da ich auf cppreference keinen Hinweis zu dieser Vorgehensweise gefunden habe, Ich bin mir nicht sicher, ob ich ein UB verwende, oder ob dies nur ein Fehler von MSVC14.00 ist. Irgendwelche Ideen?
Dank der freundlichen Kommentare scheint es sich um einen Fehler dieser Version von MSVC zu handeln. Ich bin jedoch immer noch verwirrt, ob diese Vorgehensweise den C++11-Standards entspricht? Ich meine, die meisten von uns kennen diese Form der Initialisierung von PODs. Aber ich kann aus der CPP-Referenz keine genaue Aussage über das Verhalten solcher Codes finden oder ableiten.