Her*_*esy 4 c++ arrays std initializer-list c++11
现在我有一个C++函数
void F( std::array<int,3> x )
{
//...
}
Run Code Online (Sandbox Code Playgroud)
我希望参数'x'可以有一个默认值,我该怎么做?
如果不是函数参数,我可以简单地使用
std::array<int,3> x = {1,2,3};
Run Code Online (Sandbox Code Playgroud)
但对于函数参数,代码
void F( std::array<int,3> x = {1,2,3} )
{
//...
}
Run Code Online (Sandbox Code Playgroud)
会使编译错误.
我在MSVC 2012中测试,并得到错误C2143,C2059,C2447.还有g ++ 4.6.3中的错误
有没有办法让它有一个默认值?
谢谢.
Mor*_*enn 11
您的解决方案应该按照标准运行,但在某些编译器中没有实现.他们中的大多数可以std::array使用语法初始化实例x = {{1,2,3}},而不是x = {1, 2, 3}.如果您希望它在今天起作用,您的功能应该是:
void F( std::array<int,3> x = {{1,2,3}} )
{
//...
}
Run Code Online (Sandbox Code Playgroud)
这是因为std::array下面只有一个C数组,并使用聚合初始化初始化它.第一对大括号用于列表初始化列表,而第二对大括号用于C数组初始化.
根据标准(8.5.1.11),如果(并且仅当)使用符号=进行初始化,则在这种情况下可以省略外括号.但是,一些编译器仍然不支持这种行为(g ++就是其中之一).
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |