Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
inicjalizacja typu copy-list nie może używać jawnego konstruktora
Uwagi
Zgodnie ze standardem ISO C++17 kompilator jest wymagany do rozważenia jawnego konstruktora do rozpoznawania przeciążenia w inicjowaniu kopii listy, ale musi zgłosić błąd, jeśli to przeciążenie jest rzeczywiście wybrane.
Począwszy od programu Visual Studio 2017, kompilator wyszukuje błędy związane z tworzeniem obiektów przy użyciu listy inicjatorów, które nie zostały odnalezione przez program Visual Studio 2015. Te błędy mogą prowadzić do awarii lub niezdefiniowanego zachowania w czasie wykonywania.
Przykład
Poniższy przykład generuje kod 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
}
Aby rozwiązać ten problem, użyj inicjowania bezpośredniego zamiast tego:
// C3445b.cpp
struct A
{
explicit A(int) {}
A(double) {}
};
int main()
{
A a1{ 1 };
}