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

时间:2012-12-23 17:40:42

标签: c++ c++11 constructor argument-passing pod

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.

2 个答案:

答案 0 :(得分:1)

如果要将初始化列表样式语法传递给构造函数,则必须将std::initializer_list类型传递给构造函数。然后,当传递{ }语法样式构造时,此类型将构造一个类型数组。

答案 1 :(得分:1)

  

Visual Studio 2012(Nov CTP)报告:

它甚至不是 beta 编译器。它应该工作。我会链接到你在ideaone上工作的代码,但是这个网站不会这样做。

提交错误报告。