#include <initializer_list>
#include <iostream>
using namespace std;
struct Y {};
struct X
{
X(initializer_list<Y>) { cout << "yay" << endl; }
explicit X() { cout << "boo" << endl; }
};
X f()
{
return {};
}
int main()
{
f();
return 0;
}
這會打印出「boo」。爲什麼不打印出「耶」?initializer_list和默認構造函數重載分辨率
反正是有區分以下兩種結構:
X()
X{}
或
return X();
return {};
或
void g(const X&)
g(X())
g({})
感謝。
它是沒有意義的使用'explicit'使用默認的構造函數,它僅用於構建函數可以被稱爲只有一個參數,禁止隱式類型轉換。例如,'MyObject x = 9;'只有當MyObject有一個非''explicit'cObject'MyObject(int)'時纔可能。在你的例子中,'explicit'被編譯器忽略。 –
是的,我認爲(不正確),它可能會幫助使這種超載按我想要的方式。 –