我有这个功能...
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&'的转换未知
因此,如果g ++无法支持此功能,我有什么选择?所有可能的替代品都不太优雅
a)声明一个向量,并通过引用GetAVector和ExpectingAVector传递它?
b)让GetAVector返回指向vector的指针,并让ExpectingAVector接受它吗?凌乱的清理
c)让ExpectingAVector接受矢量对象并接受效率低下吗?
做这个的最好方式是什么?
最佳答案
ExpectingAVector( GetAVector() );
|
+-------------Creates a temporary vector<int> object (rvalue)
采用 :
void ExpectingAVector(const std::vector<int> &vec);
临时对象无法绑定到非常量引用
这是Visual C ++的扩展,允许这种行为,可以通过某些标志禁用(我不知道是哪个标志)
您还可以在
void ExpectingAVector(std::vector<int> &&vec ) { }
中使用移动语义如果您对C ++ 11没问题。