Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die copy-list-Initialisierung von „type“ darf keinen expliziten Konstruktor verwenden
Bemerkungen
Gemäß dem ISO C++17-Standard ist der Compiler erforderlich, um einen expliziten Konstruktor für die Überladungsauflösung in der Copy-List-Initialisierung in Betracht zu ziehen, muss jedoch einen Fehler auslösen, wenn diese Überladung tatsächlich ausgewählt wird.
Ab Visual Studio 2017 findet der Compiler Fehler im Zusammenhang mit der Objekterstellung mithilfe einer Initialisierungsliste, die von Visual Studio 2015 nicht gefunden wurde. Diese Fehler können zu Abstürzen oder nicht definierten Verhaltensweisen zur Laufzeit führen.
Beispiel
Im folgenden Beispiel wird C3445 generiert.
// C3445.cpp
struct A
{
explicit A(int) {}
A(double) {}
};
int main()
{
A a1 = { 1 }; // error C3445: copy-list-initialization of
// 'A' cannot use an explicit constructor
}
Verwenden Sie zum Beheben des Fehlers stattdessen die direkte Initialisierung:
// C3445b.cpp
struct A
{
explicit A(int) {}
A(double) {}
};
int main()
{
A a1{ 1 };
}