我有这个功能......
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接受一个矢量对象并接受低效率?
这样做的最佳方式是什么?
答案 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没问题。