现在我有一个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中的错误
有没有办法让它有默认值?
感谢。
答案 0 :(得分:11)
您的解决方案应该按照标准运行,但在某些编译器中没有实现。他们中的大多数可以使用语法std::array
初始化x = {{1,2,3}}
的实例,而不是使用x = {1, 2, 3}
。如果您希望它在今天起作用,您的功能应该是:
void F( std::array<int,3> x = {{1,2,3}} )
{
//...
}
这是因为std::array
下面只有一个C数组,并用aggregate initialization初始化它。第一对大括号用于列表初始化列表,而第二对大括号用于C数组初始化。
根据标准(8.5.1.11),如果(并且仅当)使用符号=
进行初始化,则可以在这种情况下省略外括号。但是,有些编译器仍然不支持这种行为(g ++就是其中之一)。
作为奖励,you can check it online与ideone。