返回值优化(Return Value Optimization,简称RVO)是一种编译器优化机制:当函数需要返回一个对象的时候,如果自己创建一个临时对象用于返回,那么这个临时对象会消耗一个构造函数(Constructor)的调用.一个复制构造函数的调用(Copy Constructor)以及一个析构函数(Destructor)的调用的代价. 经过返回值优化,就可以将成本降低到一个构造函数的代价.这样就省去了一次拷贝构造函数的调用和依次析构函数的调用. 例子如下: class MyString {…
蓝色的博文 To summarize, RVO is a compiler optimization technique, while std::move is just an rvalue cast, which also instructs the compiler that it's eligible to move the object. The price of moving is lower than copying but higher than RVO, so never app…
C++的函数中,如果返回值是一个对象,那么理论上它不可避免的会调用对象的构造函数和析构函数,从而导致一定的效率损耗.如下函数所示: A test() { A a; return a; } 在test函数里,生成了一个A的临时对象,之后将它作为返回值返回,在生成a的过程中会调用constructor,离开函数的时候会调用该临时对象的destructor. C++的编译器采用了一种称为返回值优化(RVO)的技术,假设说这么写代码: A test() { return A(); } A a=test(…