问题标签 [rvo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 为什么赋值运算符不会发生 RVO?(C++)
例子:
为什么编译器不能直接将新对象写入现有对象?我相信一个类的所有实例都占用相同数量的(非动态)内存,所以我不明白为什么这会是一个问题。
c++ - RVO 和 NRVO 优化 + C++11 移动运算符
我试图弄清楚 RVO 和 NRVO 如何与新的 C++11 移动运算符一起工作。我用几个例子起草了一个虚拟课程。
编辑:只显示代码的最重要部分。
完整的源代码可在此处获得。
我有两个函数将类作为引用并返回值或引用:
当我调用这些函数时,我有以下输出:
当使用左值引用时,不会调用复制构造函数。否则,那些函数(接收引用作为参数)仍然调用复制构造函数。
此功能编译器是否依赖?难道我做错了什么?
c++ - 如何移动 const 返回的对象?
最近,我一直在阅读这篇文章以及建议停止返回 const 对象的文章。Stephan T. Lavavej在 Going Native 2013的演讲中也给出了这个建议。
我写了一个非常简单的测试来帮助我理解在所有这些情况下调用了哪个构造函数/操作符:
- 返回 const 或非 const 对象
- 如果返回值优化 ( RVO ) 启动会怎样?
- 如果命名返回值优化 (NRVO) 启动会怎样?
这是测试:
这是发布模式下的输出(使用 NRVO 和 RVO):
我不明白的是: 为什么在“构造函数 csum”测试中使用移动构造函数?
返回对象是 const 所以我真的觉得它应该调用复制构造函数。
我在这里想念什么?
它不应该是编译器的错误,Visual Studio 和 clang 都提供相同的输出。
c++ - 是否有像 RVO 和 NRVO 这样的语言级别优化?
RVO 是一种编译器优化,但可以提供非常有用的性能提升。但是,它不能保证,也不能依赖。
语言标准本身有什么可以优化返回值的吗?移动语义仍然复制成员值,对吗?
c++ - 当没有为类定义复制构造函数时,是否会发生 RVO 优化?
可以说我有这段代码:
Base 没有定义复制构造函数,并且查看其成员,编译器不会合成一个。
是否为此代码应用了命名返回值 (NRV) 优化?编译器应用 NRV 的确切规则是什么?
c++ - 返回一个 fstream
我有这个功能:
但我的编译器抱怨fstream
复制构造函数被隐式删除。鉴于编译器执行 RVO,为什么选择复制构造函数而不是移动构造函数?
否则,最好的方法是什么?
c++ - RVO 和复制省略是否只能在一个编译单元内工作?
它们是否适用于不同的目标文件?它们是否跨不同的 DLL 工作?
我知道这取决于编译器。我很好奇是否有任何编译器和优化设置可以使这项工作。
c++ - 返回一个向量,这里应用的是 RVO 还是移动构造函数?
我有一个类,它有一个 std::vector 数据成员。然后我有一个简单的 get 成员函数,它只是按值返回数据成员。
当我调用以下 C++ 时:
这个 x86 是产生的:
我期望应用返回值优化 (RVO) 或std::vector
移动构造函数。但是,我无法从 x86 中推断出哪个?