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扫描是默认的且最流行的扫 ...
随机推荐
- Matrix [POJ3685] [二分套二分]
Description 有一个N阶方阵 第i行,j列的值Aij =i2 + 100000 × i + j2 - 100000 × j + i × j,需要找出这个方阵的第M小值. Input 第一行输 ...
- 作用域和闭包(二)this
this 要在执行时才确认,定义时无法确认 1. 作为构造函数执行 2. 作为对象属性执行 3.作为普通函数执行 4. call,apply,bind 改变this
- 修改input和textarea的placeholder的颜色,限制文本框字数输入
<style type="text/css"> textarea{ width: 400px; height:400px; resize: none; } .limit ...
- MVC中EF代码优先问题
在练习Mvc项目时,提示如下数据库错误: The model backing the 'EFDbContext' context has changed since the database was ...
- CSS入门介绍(二)CSS选择器
css选择器 什么是选择器? 选择器是你构造好网页的结构,需要给这些结构赋予样式,这时候就需要用到选择器,利用选择器将元素与样式一一对应:两者的对应关系可以是一对一,一对多,多对一. 选择器的分类: ...
- Java当中的异常2
1.throw的作用 如果一行有可能代码抛出Execption对象或者check exception 就必须对这行代码进行处理 2.throws的作用 Throws表明这个类或者方法可能会产生一个指定 ...
- 高性能平滑动画_requestAnimationFrame
高性能平滑动画_requestAnimationFrame 在下一次重绘之前,执行一个函数
- [LeetCode] Most Common Word 最常见的单词
Given a paragraph and a list of banned words, return the most frequent word that is not in the list ...
- 写一篇博文介绍JSP
一.JSP概述 JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导.许多公司参与一起建立的 ...
- Linux服务器在SSH客户端如何实现免密登录
一.SSH客户端Setting 配置 key , 创建生成公钥导出文件. 二.服务器 master 上生成密钥 通过执行命令 ssh-keygen -t rsa 来生成我们需要的密钥. ssh-ke ...