4

现在我在 C++ 中有一个函数

void F( std::array<int,3> x )
{
    //...
}

我希望参数'x'可以有一个默认值,我该怎么做?

如果不是函数参数,我可以简单地使用

std::array<int,3> x = {1,2,3};

但是对于函数参数,代码

void F( std::array<int,3> x = {1,2,3} )
{
    //...
}

会使编译器出错。


我在 MSVC 2012 中测试,并得到错误 C2143、C2059、C2447。还有 g++ 4.6.3 中的错误


有没有办法让它有一个默认值?

谢谢。

4

1 回答 1

11

您的解决方案应按照标准工作,但未在某些编译器中实现。他们中的大多数可以std::array用语法初始化实例x = {{1,2,3}},而不是用x = {1, 2, 3}。如果您希望它从今天开始工作,您的功能应该是:

void F( std::array<int,3> x = {{1,2,3}} )
{
    //...
}

这是因为std::array下面只有一个 C 数组并使用聚合初始化对其进行初始化。第一对大括号用于列表初始化列表,而第二对大括号用于 C 数组初始化。

=根据标准(8.5.1.11),在这种情况下,如果(且仅当)您使用符号进行初始化,则可以省略外部大括号。但是,一些编译器仍然不支持这种行为(g++ 就是其中之一)。

作为奖励,您可以使用 ideone 在线查看。

于 2013-05-02T10:08:12.067 回答