无法将函数返回的向量传递给期望引用方法的函数

时间:2014-10-31 04:53:24

标签: c++ eclipse visual-studio-2012 stl ubuntu-12.04

我有这个功能......

std::vector<int> GetAVector();

用作此函数的参数:

void ExpectingAVector(std::vector<int> &vec);

所以这个结构:

ExpectingAVector(GetAVector());

在Visual Studio 2012上编译,但不在G ++,Eclipse Indigo,Ubuntu 12.04上编译

错误讯息: 注意:参数1从'std :: vector'到'std :: vector&amp;'

没有已知的转换

所以如果g ++不能支持这个,那么我的选择是什么?所有可能的选择都不那么优雅

a)声明一个向量并通过引用GetAVector和ExpectingAVector传递它?
b)让GetAVector返回指向vector的指针并让ExpectingAVector接受它吗?凌乱的清理
c)让ExpectingAVector接受一个矢量对象并接受低效率?

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

ExpectingAVector( GetAVector() );
                  |
                  +-------------Creates a temporary vector<int> object (rvalue)

使用:

void ExpectingAVector(const std::vector<int> &vec);

临时对象无法绑定到非const引用

这是Visual C ++的扩展,允许这样的行为,可以通过某些标志我不知道哪些

来禁用

你也可以在void ExpectingAVector(std::vector<int> &&vec ) { }使用move-semantics 如果你对C ++ 11没问题。