'type' 的 copy-list-initialization 不得使用明確的建構函式
備註
根據 ISO C++17 標準,編譯程式必須考慮複製清單初始化中多載解析的明確建構函式,但如果實際選擇該多載,就必須引發錯誤。
從 Visual Studio 2017 開始,編譯程式會使用 Visual Studio 2015 找不到的初始化運算式清單,尋找與建立對象相關的錯誤。 這些錯誤可能會導致運行時間當機或未定義的行為。
範例
下列範例會產生 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
}
若要更正錯誤,請改用直接初始化:
// C3445b.cpp
struct A
{
explicit A(int) {}
A(double) {}
};
int main()
{
A a1{ 1 };
}