为什么不能将初始列表用作参数

Why can an initializer-list not be used as an argument?

本文关键字:参数 列表 不能 为什么      更新时间:2023-10-16
struct X
{
    int a;
    int b;
};
int f(X x)
{
    return x.a + x.b;
}
int main()
{
    int n = f({1, 2});
}

Visual Studio 2012(Nov CTP)报告:

error C2664: 'int f(const X &)' : cannot convert parameter 1 from
'initializer-list' to 'X'
Reason: cannot convert from 'initializer-list' to 'X'
Only an initializer-list with zero or one elements can be converted to this type
Build FAILED.

Visual Studio 2012(Nov CTP)报告:

甚至不是 beta 编译器。它应该工作。我将链接到您在IdeaNe上工作的代码,但是本网站不会让那样做。

文件上的错误报告。

如果要将Intializer List样式语法传递给构造函数,则必须将std::initializer_list类型传递给构造函数。然后,此类型将在传递{ }语法样式构造时构造您类型的数组。