先看个代码吧!!!!!!!!!!

#include <iostream>

using namespace std;

class A
{
public:
A(){cout<<"construct1..............."<<endl;}
A& operator = (const A&&) {cout<<" operator move"<<endl;}
A(const A&&){cout<<"move construct "<<endl;} A& operator = (const A&){cout<<"copy operator"<<endl;}
A(const A&){cout<<"copy construct"<<endl;}
};
int main()
{
A a1 = A(); // 这里调用的到底是哪一个构造函数?
A a2 = std::move(A()); // 调用什么呢?
a2 = A();//调用operator =(const A&&) A&& a = A();//只调用默认构造
return 0;
}
$g++ -std=c++11 -o main *.cpp -fno-elide-constructors 去掉优化
$main
construct1...............
move construct
construct1...............
move construct
construct1...............
operator move
construct1...............

上面的代码如果注释掉9行10行结果如下

$g++ -std=c++11 -o main *.cpp  -fno-elide-constructors          去掉优化
$main
construct1...............
copy construct
construct1...............
copy construct
construct1...............
copy operator
construct1...............

上面的代码正好验证了一句话     定义了move构造函数后,拷贝构造函数默认为删除的。   不删除也不会有什么影响!!!(目前是这样)

effective modern cpp   条款17  理解特殊成员函数的生成规则

 你要记住的事
  • 特殊成员函数是那些编译器可能自己帮我们生成的函数:默认构造函数,析构函数,copy操作,move操作。
  • 只有在类中没有显式声明的move操作,copy操作和析构函数时,move操作才被自动生成。
  • 只有在类中没有显式声明的拷贝构造函数的时候,拷贝构造函数才被自动生成。只要存在move操作的声明,拷贝构造函数就会被删除(delete)。拷贝operator=和拷贝构造函数的情况类似。在有显式声明的copy操作或析构函数时,另一个copy操作能被生成,但是这种生成方法是被弃用的
  • 成员函数模板永远不会抑制特殊成员函数的生成。

还未学完!!!!!!!!

c++11 move构造函数和move operator 函数 学习的更多相关文章

  1. c++11 标准库函数 std::move 和 完美转发 std::forward

    c++11 标准库函数 std::move 和 完美转发 std::forward #define _CRT_SECURE_NO_WARNINGS #include <iostream> ...

  2. C++移动构造函数以及move语句简单介绍

    C++移动构造函数以及move语句简单介绍 首先看一个小例子: #include <iostream> #include <cstring> #include <cstd ...

  3. 【C++】拷贝构造函数和赋值符函数

    在C++中,调用拷贝构造函数有三种情况: 1.一个对象作为函数参数,以值传递的方式传入函数体. 2.一个对象作为函数返回值,以值传递的方式从函数返回. 3.一个对象用于给另外一个对象进行初始化(复制初 ...

  4. C++11 中的 Defaulted 和 Deleted 函数

    http://blog.jobbole.com/103669/ C++11 中的 Defaulted 和 Deleted 函数 2016/07/21 · C/C++, 开发 · C++ 分享到:3   ...

  5. C++11:移动构造函数的测试

    C++11:移动构造函数的测试 代码如下: #include <iostream> #include <stddef.h> #include <Windows.h> ...

  6. JavaScript中以构造函数的方式调用函数

    转自:http://www.cnblogs.com/Saints/p/6012188.html 构造器函数(Constructor functions)的定义和任何其它函数一样,我们可以使用函数声明. ...

  7. 关于在C#中构造函数中调用虚函数的问题

    在C#中如果存在类的继承关系,应避免在构造函数中调用虚函数.这是由于C#的运行机制造成的,原因如下: 新建一个类实例时,C#会先初始化该类(对类变量赋值,并将函数记在函数表中),然后再初始化父类.构造 ...

  8. C++ Daily 《3》----构造函数可否是虚函数

    C++ 中构造函数可否是虚函数? 绝不要!! 而且,在构造函数中调用虚函数也是不提倡的行为,因为会引发预想不到的结果. 因为,在 derived class 对象构造的过程中,首先调用的是基类的构造函 ...

  9. C++ 构造函数中调用虚函数

    我们知道:C++中的多态使得可以根据对象的真实类型(动态类型)调用不同的虚函数.这种调用都是对象已经构建完成的情况.那如果在构造函数中调用虚函数,会怎么样呢? 有这么一段代码: class A { p ...

随机推荐

  1. CH24C 逃不掉的路

    edcc缩点之后跳倍增lca 丢个edcc缩点模板 Code: #include <cstdio> #include <cstring> using namespace std ...

  2. Luogu 2254 [NOI2005]瑰丽华尔兹

    简单dp,设$f_{i,j,k}$表示第i个时间段,钢琴处在(j,k)位置移动距离的最大值,那么有转移 $f_{i, j, k} = max(f_{i - 1, j, k}) ,  f_{i, j, ...

  3. Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别

    查了一些资料也不是太明白两个的区别,但是前者是最安全的用法 打个简单的比方,你一个WEB程序,发布到Tomcat里面运行.首先是执行Tomcat org.apache.catalina.startup ...

  4. 20169219《Linux内核原理及分析》第十二周作业

    格式化字符串漏洞实验 格式化字符串攻击原理是利用格式化函数(如printf())的沿着堆栈指针向下打印的特性,通过只提供格式化字符串但不提供对应的变量,读取栈内空间的内容. 更进一步,通过将某个要攻击 ...

  5. 【Java学习】Java迭代器

    迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的.只要拿到这个对象,使用迭代器就可以遍历这个对象的内部. 1.Iterator ...

  6. Git发布本地项目至仓库命令行操作流程

    1.初始化项目 git init 2.创建名称为 gh-pages 新分支(若直接发布至master分支,忽略此步) git checkout --orphan gh-pages 3.把所有内容加入本 ...

  7. Django会话,用户和注册之cookie

    HTTP状态和TCP不一样,HTTP是无状态的,也就是这一次请求和下一次请求之间没有任何状态保持,我们无法根据请求例如IP来识别是否在同一人的连续性请求.就像我们在访问网站的时候,输入了用户名和密码, ...

  8. [SinGuLaRiTy] 分治题目复习

    [SInGuLaRiTy-1025] Copyrights (c) SinGuLaRiTy 2017. All Rights Reserved. [POJ 1905] 棍的膨胀 (Expanding ...

  9. poj1830(高斯消元解mod2方程组)

    题目链接:http://poj.org/problem?id=1830 题意:中文题诶- 思路:高斯消元解 mod2 方程组 有 n 个变元,根据给出的条件列 n 个方程组,初始状态和终止状态不同的位 ...

  10. jzoj4918. 【GDOI2017模拟12.9】最近公共祖先 (树链剖分+线段树)

    题面 题解 首先,点变黑的过程是不可逆的,黑化了就再也洗不白了 其次,对于\(v\)的祖先\(rt\),\(rt\)能用来更新答案当且仅当\(sz_{rt}>sz_{x}\),其中\(sz\)表 ...