其实这一点在C++的基础类入门书,如C++ primer里面也有说过,不过很少有人去注意而已,作者把这一点提出来,是为了提醒我们。

这一条款的内容如下:就是说当你书写下面的【代码片段1】的时候,其实经过编译器处理后,你所书写的代码本质上是【代码片段2】:

代码片段1(你亲自手写的):

1 class  A{
2
3 };

代码片段2(编译器帮你生成的):

1 class A{
2 public:
3     A() { ... }
4     A(const A& rhs) { ... }
5     ~A() { ... }
6
7     A& operator =(const A& rhs) { ... }
8 };

从上面可以看出来,编译器为我们补充声明了:

1. 无参构造函数

2. 拷贝构造函数

3. 析构函数

4. 赋值操作符=

在本条款中,作者又说明了另外一点,那就是关于赋值操作符=的生成规则,到底是生成呢,还是不生成呢?我们来看两个例子:

 1 #include <iostream>
 2 using namespace std;
 3
 4 class A{
 5 };
 6
 7 int main(){
 8     A a1;
 9     A a2;
10     a1 = a2;
11     return 0;
12 }

结果:编译运行成功!

 1 #include <iostream>
 2 using namespace std;
 3
 4 class A{
 5 public:
 6     int value;
 7     const int constValue;
 8     A(int v):constValue(v){}
 9 };
10
11 int main(){
12     A a1(10);
13     A a2(20);
14     a1 = a2;
15     return 0;
16 }

结果:编译失败,提示“Error:没有与这些操作数匹配的‘=’运算符”。

这说明了:

当类中有引用,常量定义时,编译器不会为其生成‘=’运算符的函数。

转载于:https://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/21/2733061.html

[Effective C++读书笔记]005_条款05_了解C++默默编写并调用哪些函数相关推荐

  1. EffectiveC++详解:条款05-了解C++默默编写并调用哪些函数

    文章目录 条款05-了解C++默默编写并调用哪些函数 当我们写了一个空类,意味着什么 编译器什么时候拒绝生成拷贝赋值运算符 总结 @Author:CSU张扬 @Email:csuzhangyang@g ...

  2. Effective C++:条款05:了解C++默默编写并调用哪些函数 (Know what functions C++ silently writes and calls.)...

    编译器可以暗自为class创建default构造函数.copy构造函数.copy assignment操作符,以及析构函数. 转载于:https://www.cnblogs.com/elite/arc ...

  3. Effective C++条款05:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls)

    Effective C++条款05:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls) 条款05:了解C++默默编写 ...

  4. effective C++读书笔记--【条款07:为多态基类声明virtual析构函数】

    问题 base class的指针p,指向一个derived class,如果: base class带着一个non-virtual析构函数: derived class对象经由这个base class ...

  5. [Effective C++读书笔记]003_条款03_尽可能使用const

    参考同事博客:http://www.cnblogs.com/hustcser/archive/2012/10/19/2731085.html 转载于:https://www.cnblogs.com/a ...

  6. Effective C++ 学习笔记 条款05 了解C++默默编写并调用了哪些函数

    当写下一个空类时,编译器会为你合成一个拷贝构造函数.一个拷贝赋值运算符.一个析构函数,如没有声明其他的构造函数,编译器会合成一个默认构造函数.这些都是inline的public成员. 当类有一个引用成 ...

  7. Effective C++条款05:了解C++默默编写并调用哪些函数

    class Empty{};class Empty{Empty(){};Empty(const Empty& rhs){};~Empty(){};Empty& operator=(co ...

  8. 条款05:了解C++默默编写并调用哪些函数

    空类 如果你没有声明,编译器会为它声明一个default构造函数,copy构造函数,析构函数,赋值操作符. class Empty{}; //--------- class Empty { publi ...

  9. 条款5:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls)...

    1.default costructor  / copy constructor / copy assignment 者三者的区别? 特别是copy constructor & copy as ...

最新文章

  1. Institute for Manufacturing virtual check in part 1
  2. Node.js 安装及配置
  3. 数组的几种定义方式及初始化
  4. 《js读取本地json文件》及浏览器跨域设置、《js保存json到本地》
  5. Visio 2016软件
  6. 解决百度地图生成器添加标注后图标不显示的问题
  7. 哪里看计算机主板,电脑主板型号和参数在哪里查看
  8. 扫雷android设计思路,Flash扫雷游戏设计思路与步骤(4)
  9. 软考高级系统架构设计师:五大类安全服务
  10. C语言(一):C语言概述介绍
  11. 信用卡有很多好处,远不止解决你燃眉之急这么简单
  12. 茶馆预定APP开发功能需求
  13. 归并排序算法分析与实现
  14. P1875 佳佳的魔法药水
  15. 移动端实现水平垂直居中的整个页面loading层
  16. c++的lambda使用注意事项,可能导致的崩溃问题分析
  17. 盘它:上线 2 个月碾压微信、抖音,音遇登顶 App Store 榜幕后的数据真相
  18. 对于毛星云opencv教程中的方法汇总
  19. 有哪些游戏直播录屏工具?最值得推荐的5个游戏录制软件
  20. 取到一个数的各个位的方法

热门文章

  1. 2009年3月28日四级网络工程师 试卷答案、点评及讨论
  2. java按行读取byte_【util】MappedByteBuffer按行读取的方案
  3. 模块版网站与html网站,网站新闻模块代码html
  4. MySQL where后面的列子查询使用
  5. MySQL高级 - SQL优化 - 子查询优化
  6. MyBatis 源码解读-XMLConfigBuilder
  7. 执行Bean 实例化
  8. 类文件结构-method-init和类文件结构-method-main
  9. React相关资源推荐
  10. logback日志记录器讲解