Delen via


Compilerfout C3445

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