#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{}
or
return X();
return {};
or
void g(const X&)
g(X())
g({})
Thanks.
无论如何可以区分以下两种结构:
不,它们不是不同的结构。
{} 构造函数语法的主要目的是引入uniform初始化,使初始化工作在任何地方都相同。如果它们之间存在差异,那就不会是统一的。
如果您想使用空的初始值设定项列表构造函数,则必须声明您正在显式传递初始值设定项列表。像这样:return initializer_list<Y>{};
当然,统一初始化的其他目的之一是不必输入太多类型名,因此您可以使用以下命令达到相同的效果return {{}};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)