C++编译优化备忘
2018-07-04 02:07:46来源:博客园 阅读 ()
基于GCC测试:http://www.tutorialspoint.com/compile_cpp11_online.php
const A& a=fun() 与 A a= fun()
1、方法fun返回值为 const A& 时,前者比后者 减少一次拷贝构造
1 #include <iostream> 2 3 using namespace std; 4 5 class A 6 { 7 8 public: 9 10 A() { 11 cout << "--默认构造函数--" << endl; 12 } 13 14 A(const A& a) { cout << "--拷贝构造函数--" << endl; } 15 16 A & operator =(const A &a) 17 { 18 cout << "--赋值--" << endl; 19 return *this; 20 } 21 }; 22 23 class Test 24 { 25 public: 26 const A& GetA(){ cout <<&m_a << endl; return m_a;} 27 28 private: 29 A m_a; 30 }; 31 32 int main() 33 { 34 Test t; 35 A vec; 36 cout << "------" << endl; 37 A a=t.GetA(); 38 cout <<&a << endl; 39 cout << "------" << endl; 40 const A& b=t.GetA(); 41 cout <<&b << endl; 42 return 0; 43 }
2、方法fun返回值为 A 时,相同。只会生成一个临时变量
A GetA(){ cout <<&m_a << endl; return m_a;}
A GetA(){ A a;cout <<&a << endl; return a;}
未实现move构造的类:A a=std::move(fun()) 与 A a=fun()
1、方法fun返回值为 const A& 时,相同,都调用一次拷贝构造
1 class Test 2 { 3 public: 4 const A& GetA(){ cout <<&m_a << endl; return m_a;} 5 6 private: 7 A m_a; 8 }; 9 10 int main() 11 { 12 Test t; 13 cout << "------" << endl; 14 A a=t.GetA(); 15 cout <<&a << endl; 16 cout << "------" << endl; 17 A b=std::move(t.GetA()); 18 cout <<&b << endl; 19 return 0; 20 }
2、方法fun返回值为 A,前者比后者多一次拷贝构造
1 class Test 2 { 3 public: 4 A GetA(){ cout <<&m_a << endl; return m_a;} 5 6 private: 7 A m_a; 8 }; 9 10 int main() 11 { 12 Test t; 13 cout << "------" << endl; 14 A a=t.GetA(); 15 cout <<&a << endl; 16 cout << "------" << endl; 17 A b=std::move(t.GetA()); 18 cout <<&b << endl; 19 return 0; 20 }
未实现move构造的类:A a;a=std::move(fun()) 与 A a;a=fun()
与fun的返回值无关,均相同
1 class Test 2 { 3 public: 4 A GetA(){ cout <<&m_a << endl; return m_a;} 5 6 private: 7 A m_a; 8 }; 9 10 int main() 11 { 12 Test t; 13 cout << "------" << endl; 14 A a; 15 a=t.GetA(); 16 cout <<&a << endl; 17 cout << "------" << endl; 18 A b; 19 b=std::move(t.GetA()); 20 cout <<&b << endl; 21 return 0; 22 }
1 const A& GetA(){ cout <<&m_a << endl; return m_a;}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 转换函数搭配友元函数 2020-06-10
- C++ 自动转换和强制类型转换(用户自定义类类型) 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ 运算符重载 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash