C++编译优化备忘
基于GCC测试:http://www.tutorialspoint.com/compile_cpp11_online.php
const A& a=fun() 与 A a= fun()
1、方法fun返回值为 const A& 时,前者比后者 减少一次拷贝构造
#include <iostream>
using namespace std;
class A
{
public:
A() {
cout << "--默认构造函数--" << endl;
}
A(const A& a) { cout << "--拷贝构造函数--" << endl; }
A & operator =(const A &a)
{
cout << "--赋值--" << endl;
return *this;
}
};
class Test
{
public:
const A& GetA(){ cout <<&m_a << endl; return m_a;}
private:
A m_a;
};
int main()
{
Test t;
A vec;
cout << "------" << endl;
A a=t.GetA();
cout <<&a << endl;
cout << "------" << endl;
const A& b=t.GetA();
cout <<&b << endl;
return ;
}
const &

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& 时,相同,都调用一次拷贝构造
class Test
{
public:
const A& GetA(){ cout <<&m_a << endl; return m_a;} private:
A m_a;
}; int main()
{
Test t;
cout << "------" << endl;
A a=t.GetA();
cout <<&a << endl;
cout << "------" << endl;
A b=std::move(t.GetA());
cout <<&b << endl;
return ;
}
move

2、方法fun返回值为 A,前者比后者多一次拷贝构造
class Test
{
public:
A GetA(){ cout <<&m_a << endl; return m_a;} private:
A m_a;
}; int main()
{
Test t;
cout << "------" << endl;
A a=t.GetA();
cout <<&a << endl;
cout << "------" << endl;
A b=std::move(t.GetA());
cout <<&b << endl;
return ;
}
move

未实现move构造的类:A a;a=std::move(fun()) 与 A a;a=fun()
与fun的返回值无关,均相同
class Test
{
public:
A GetA(){ cout <<&m_a << endl; return m_a;} private:
A m_a;
}; int main()
{
Test t;
cout << "------" << endl;
A a;
a=t.GetA();
cout <<&a << endl;
cout << "------" << endl;
A b;
b=std::move(t.GetA());
cout <<&b << endl;
return ;
}
赋值

const A& GetA(){ cout <<&m_a << endl; return m_a;}
const A&

C++编译优化备忘的更多相关文章
- QT开发编译问题备忘
编译<Qt及Qt Quick开发实战精解> 的代码,编译出错,提示: Cannot find file: E:\学习资料\QT\<Qt及Qt Quick开发实战精解>代码\sr ...
- css相关 细节 优化 备忘
<p>标签不能再包含<p>,也不能包含<div>,<div>可以包含<p> a 和 img 标签是特殊的行内元素,a标签可以包含div等,几 ...
- windows下matplotlib编译安装备忘
windows下,codeblocks,mingw安装matplotlib. python下一些源码的编译安装,备忘. matplotlib官网编译好的版本只支持到3.3.我不慎刚下了python3. ...
- opencv-2.4.11编译备忘
编译完成后,想测试example中例子,但是由于没有sudo权限,不能运行pkg-config查看opencv的--cflags和--libs. 记录一下,备忘: pkg-config --libs ...
- php 相关模块备忘
在安装php的时候,不管是编译安装: ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...
- 『备忘』HttpWebRequest 在 POST 提交时, 标头(Headers)丢失原因
近来研究 HttpWebRequest —— 辅助类完成时,POST JSON数据 总会 丢失标头(Headers). HttpWebRequest POST JSON数据,分如下几步: > 将 ...
- Nmap备忘单:从探索到漏洞利用(Part 5)
这是备忘单的最后一部分,在这里主要讲述漏洞评估和渗透测试. 数据库审计 列出数据库名称 nmap -sV --script=mysql-databases 192.168.195.130 上图并没有显 ...
- Nmap备忘单:从探索到漏洞利用(Part 4)
这是我们的Nmap备忘单的第四部分(Part 1. Part 2. Part 3).本文中我们将讨论更多东西关于扫描防火墙,IDS / IPS 逃逸,Web服务器渗透测试等.在此之前,我们应该了解一下 ...
- Nmap备忘单:从探索到漏洞利用(Part 2)
这是我们的第二期NMAP备忘单(第一期在此).基本上,我们将讨论一些高级NMAP扫描的技术,我们将进行一个中间人攻击(MITM).现在,游戏开始了. TCP SYN扫描 SYN扫描是默认的且最流行的扫 ...
随机推荐
- Hadoop日志文件
初学者运行MapReduce作业时,经常会遇到各种错误,往往不知所云,一般直接将终端打印的错误贴到搜索引擎上查找,以借鉴前人的经验. 对于hadoop而言,当遇到错误时,第一时间应是查看日志,日志里通 ...
- php生成随机字符串可指定纯数字、纯字母或者混合的
php 生成随机字符串 可以指定是纯数字 还是纯字母 或者混合的. 可以指定长度的. function rand_zifu($what,$number){ $string=''; for($i = 1 ...
- VS2008,System.Runtime.InteropServices.COMException (0x800401F3): Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))
在VS2008环境中编译调试运行不报错,但在发布的exe文件运行就报错 System.Runtime.InteropServices.COMException (0x800401F3): Invali ...
- vue菜鸟从业记:公司项目里如何进行前后端接口联调
最近我的朋友王小闰进入一家新的公司,正好公司项目采用的是前后端分离架构,技术栈是王小闰非常熟悉的vue全家桶,后端用的是Java语言. 在前后端开发人员碰面之后,协商确定好了前端需要的数据接口(扯那么 ...
- 白盒测试实践-day03
一.任务进展情况 完成了基本的测试过程,下一步整理文档. 二.存在的问题 对于JUnit测试,对测试系统还不是太了解,导致测试脚本无法写. 三.解决方法 熟悉测试系统的结构,上网搜集资料.
- IntelliJ IDEA 2017.2.6 x64 配置 tomcat 启动 maven 项目
IntelliJ IDEA 2017.2.6 x64 配置 tomcat 启动 maven 项目 1.确认 IDEA 是否启用了 tomcat 插件 2.添加 tomcat 选择 tomcat 存放路 ...
- mvc模式的理解
一开始总是觉得dao层和service层没有区别,甚至觉得service层根本就是多余的,service层就是把dao层的内容调用了一下,然后重写了一次,后来才理解到,dao层是数据链路层,是与数据库 ...
- JAVA RPC (六) 之手把手从零教你写一个生产级RPC之client的代理
首先对于RPC来讲,最主要的无非三点[SERVER IO模型].[序列化协议].[client连接池复用],之前的博客大家应该对thrift有一个大致的了解了,那么我们现在来说一说如何将thrift的 ...
- 初步学习python
自计算机诞生以来,也伴随着计算机语言的诞生,现在,全世界的编程语言有600多种,但流行的编程语言也就20多种. Java和C一直占据着前两名.但是近年来伴随着人工智能的发展,Python发展迅猛,以其 ...
- Linux升级python3之后yum不能正常使用解决方法一:重新配置yum源
[转]linux下yum安装及配置 分步阅读 公司使用的是linux搭建服务器,linux安装软件能够使用yum安装依赖包是一件非常简单而幸福的事情,所以这里简单介绍一下linux安装yum源流程和操 ...