#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"。为什么它不会打印出 "yay"?
有没有办法区分以下两个构造:
X()
X{}
或者
return X();
return {};
void g(const X&)
g(X())
g({})
Thanks.
explicit
是没有意义的,它只用于可能被调用一次参数的构造函数,以禁止隐式类型转换。例如,只有当MyObject
有一个非explicit
构造函数MyObject(int)
时,才可以执行MyObject x = 9;
这个操作。在你的示例中,编译器会忽略explicit
。 - Ferdinand Beyer