Tag: rvo

为什么Visual Studio在这种情况下不执行返回值优化(RVO)

我正在回答一个问题,并build议按值返回一个大的types,因为我确信编译器会执行返回值优化(RVO) 。 但后来有人向我指出,Visual Studio 2013在我的代码上没有执行RVO。 我在这里发现了一个关于Visual Studio未能执行RVO的问题,但是在这种情况下,结论似乎是,如果真的很重要,Visual Studio将执行RVO。 在我的情况下,它确实很重要,它对性能的影响很大,我已经通过性能分析结果进行了确认。 这是简化的代码: #include <vector> #include <numeric> #include <iostream> struct Foo { std::vector<double> v; Foo(std::vector<double> _v) : v(std::move(_v)) {} }; Foo getBigFoo() { std::vector<double> v(1000000); std::iota(v.begin(), v.end(), 0); // Fill vector with non-trivial data return Foo(std::move(v)); // Expecting RVO to happen here. } int main() { std::cout << […]

返回值优化或移动?

我不明白当我应该使用std::move ,当我应该让编译器优化…例如: using SerialBuffer = vector< unsigned char >; // let compiler optimize it SerialBuffer read( size_t size ) const { SerialBuffer buffer( size ); read( begin( buffer ), end( buffer ) ); // Return Value Optimization return buffer; } // explicit move SerialBuffer read( size_t size ) const { SerialBuffer buffer( size ); read( […]