Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
copy-list-initialisatie van 'type' kan geen expliciete constructor gebruiken
Opmerkingen
Volgens de ISO C++17-standaard moet de compiler rekening houden met een expliciete constructor voor overbelastingsresolutie in copy-list-initialisatie, maar moet er een fout optreden als die overbelasting daadwerkelijk wordt gekozen.
Vanaf Visual Studio 2017 vindt de compiler fouten met betrekking tot het maken van objecten met behulp van een initialisatielijst die niet is gevonden door Visual Studio 2015. Deze fouten kunnen leiden tot crashes of niet-gedefinieerd gedrag tijdens runtime.
Example
In het volgende voorbeeld wordt C3445 gegenereerd.
// 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
}
Als u de fout wilt corrigeren, gebruikt u in plaats daarvan directe initialisatie:
// C3445b.cpp
struct A
{
explicit A(int) {}
A(double) {}
};
int main()
{
A a1{ 1 };
}