Sdílet prostřednictvím


Chyba kompilátoru C3445

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 };
}