赞
踩
#include<iostream> struct Copyable{ Copyable() { std::cout<< "copied...." << std::endl; } Copyable(const Copyable ©) { std::cout<< "copied" << std::endl; } }; Copyable ReturnRvalue() { // 这是返回的 右值 return Copyable(); } // 1. 接收右值表达式 void AcceptValue(Copyable copy) { } // 2. 右值引用减少对象开销,并延迟对象生命周期 // 直观意义:为临时变量续命,也就是为右值续命,因为右值在表达式结束后就消亡了, // 如果想继续使用右值,那就会动用昂贵的拷贝构造函数。 void AcceptRef(Copyable && copy) { } // 3. 常量左值引用减少对象开销,并延迟对象生命周期 void AcceptRef_2(const Copyable& copy){} int main() { Copyable copy; std::cout << "Pass by value:" << std::endl; AcceptValue(ReturnRvalue()); std::cout << "Passs by reference: " << std::endl; AcceptRef(ReturnRvalue()); std::cout << "Passs by reference_2: " << std::endl; AcceptRef(ReturnRvalue()); } // 打印结果: g++ -std=c++11 main.cpp -fno-elide-constructors // Copyable copy construct..... Pass by value: // ReturnRvalue() 函数:调用一次构造函数构造Copyable ,一次拷贝构造函数作为ReturnRvalue函数返回值,一次拷贝函数作为AcceptValue函数实参 construct..... copied construct copied construct Passs by reference: // ReturnRvalue() 函数:调用一次构造函数构造Copyable ,一次拷贝构造函数作为ReturnRvalue函数返回值,由于是引用传递,那么直接将此返回值作为AcceptRef函数实参 construct..... copied construct // ReturnRvalue() 函数:调用一次构造函数构造Copyable ,一次拷贝构造函数作为ReturnRvalue函数返回值,由于是引用传递,那么直接将此返回值作为AcceptRef函数实参 Passs by reference_2: construct..... copied construct
上面的例子:我们用到了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。