比方说,我有一个函数:返回值是通过C++ 0x中的右值引用传递的吗?
typedef std::vector<int> VecType;
VecType randomVector();
int processing()
{
VecType v = randomVector();
return std::accumulate(v.begin(), v.end(), 0);
}
确实的C++ 0x说具体的虚假副本将从randomVector的返回值是可以避免的?或者编译器是否需要实现RVO?在我看来,像值randomVector()
应被视为一个右值,从而五世的移动构造函数应该叫,但我不能完全肯定这是真的。
不是一个好问题,恕我直言。该标准不能有用地陈述实现可能做什么,而只是它必须做什么。 – 2009-08-22 21:15:59
实际上,在你给出的例子中,返回值优化是由大多数编译器执行的......所以它没有右值是有效的。 还右值是向函数传递参数更加重要。 – Artyom 2009-08-23 07:40:21
问题的标题有点误导。你的函数返回一个右值而不是引用。但是一个右值引用可以绑定到它,这是发生什么情况下复制elision不能执行出于某种原因,并且该类型有一个移动构造函数(移动构造函数的参数是一个右值引用) – sellibitze 2009-09-27 08:19:29