gpt4 book ai didi

c++ - c++0x 中的返回值是否将通过右值引用传递?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:02 24 4
gpt4 key购买 nike

假设我有一个函数:

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() 应该被视为右值,因此应该调用 v 的移动构造函数,但我不完全确定这是真的。

最佳答案

规则如下

  • 如果编译器可以执行 RVO,则允许执行,并且不进行复制和移动。
  • 否则,采用适当的构造函数。

就像你说的,临时对象是一个右值,因此选择了移动构造函数,因为 13.3.3.2/3 中的一条规则说,右值引用更好地绑定(bind)到右值比左值引用。在决定是使用移动构造函数还是复制构造函数时,重载决策将因此优先使用移动构造函数。

12.8/15 中写了允许编译器执行RVO 的规则。

关于c++ - c++0x 中的返回值是否将通过右值引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1316924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com