#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;
}
Run Code Online (Sandbox Code Playgroud)
这打印出"嘘声".为什么不打印出"yay"?
无论如何要区分以下两种结构:
X()X{}要么
return X();return {};要么
void g(const X&)
Run Code Online (Sandbox Code Playgroud)
g(X())g({})谢谢.
无论如何要区分以下两种结构:
不,它们不是不同的结构.
{}构造函数语法的主要目的是引入统一初始化,使初始化工作在任何地方都相同.如果他们之间存在差异,那就不一致了.
如果要使用空初始化列表构造函数,则必须声明您正在显式传递初始化列表.像这样:return initializer_list<Y>{};当然,统一初始化的其他目的之一就是不必输入类型名这么多,所以你可以达到同样的效果return {{}};
| 归档时间: |
|
| 查看次数: |
1227 次 |
| 最近记录: |