tis*_*sch 2 c++ gcc visual-studio-2010
我一直试图通过引用将std :: vector传递给函数,默认值为空std :: vector.我的函数声明如下:
void function( std::vector<double>& vec=std::vector<double>(0));
Run Code Online (Sandbox Code Playgroud)
我的功能定义是:
void function( std::vector<double>& vec)
{
...
}
Run Code Online (Sandbox Code Playgroud)
但是我的C++编译器(gcc 4.6)在这里抛出错误,说:
错误:'std :: vector&'类型参数的默认参数类型为'std :: vector'
我已经看到这个版本的代码在Microsoft VS 2010编译器上编译得很好.我想知道这是否是gcc和vs2010之间不同c ++标准解释的问题.
你不能.您不能将临时绑定到ref-to-non const,因此您只能这样做:
void function(const std::vector<double>& vec = std::vector<double>());
Run Code Online (Sandbox Code Playgroud)
在你的情况下,我建议函数重载:
void function(std::vector<double>& vec)
{
// ...
}
void function()
{
std::vector<double> v;
function(v);
}
Run Code Online (Sandbox Code Playgroud)
如果你不喜欢额外的函数调用,那么你运气不好.:)
我不知道C++ 11 rvalue refs在这里是否有帮助,如果你有权访问它们.
我已经看到这个版本的代码在Microsoft VS 2010编译器上编译得很好.我想知道这是否是gcc和vs2010之间不同c ++标准解释的问题.
MSVS倾向于允许您将临时对象绑定到refs-to-non const,这是非标准行为.GCC是正确的.