如何通过引用将std :: vector传递给函数,默认值是C++中的空std :: vector?

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 ++标准解释的问题.

Lig*_*ica 9

你不能.您不能将临时绑定到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是正确的.