Compartilhar via


Erro do compilador C3445

a inicialização da lista de cópia de 'type' não pode usar um construtor explícito

De acordo com o padrão ISO C++ 17, o compilador precisará considerar um construtor explícito para resolução de sobrecarga na inicialização de lista de cópia, mas precisará gerar um erro se essa sobrecarga for realmente escolhida.

A partir do Visual Studio 2017, o compilador encontra erros relacionados à criação de objetos usando uma lista de inicializadores que não foram encontrados pelo Visual Studio 2015. Esses erros podem levar a falhas ou comportamento indefinido no runtime.

Exemplo

O exemplo a seguir gera o erro 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
}

Para corrigir o erro, em vez disso, use a inicialização direta:

// C3445b.cpp
struct A
{
    explicit A(int) {}
    A(double) {}
};

int main()
{
    A a1{ 1 };
}