Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
kopírování seznamové inicializace typu 'type' nemůže použít explicitní konstruktor
Poznámky
Podle standardu ISO C++17 je kompilátor nutný k zvážení explicitního konstruktoru pro rozlišení přetížení při inicializaci copy-list, ale musí vyvolat chybu, pokud je toto přetížení skutečně vybráno.
Počínaje sadou Visual Studio 2017 kompilátor najde chyby související s vytvářením objektů pomocí seznamu inicializátorů, který visual Studio 2015 nenalezl. Tyto chyby můžou způsobit chybové ukončení nebo nedefinované chování za běhu.
Příklad
Následující příklad vygeneruje C3445.
// 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
}
Pokud chcete chybu opravit, použijte místo toho přímé inicializace:
// C3445b.cpp
struct A
{
explicit A(int) {}
A(double) {}
};
int main()
{
A a1{ 1 };
}