什么时候empty class(空类)不再是个empty class呢?当C++处理过它之后,是的,如果你自己没有声明,编译器就会为它声明(编译器版本)一个copy构造函数、一个copy assignment操作符和一个析构函数。此外如果你没有声明任何构造函数,编译器也会为你声明一个default构造函数。所有这些都是public且inline。

编译器所生成的copy assignment操作符,其行为基本上与copy构造函数如出一辙,但一般而言只有当生出的代码合法且有适当机会证明它有意义,编译器才会生成。

假如,类中存在引用数据成员和const成员,此时就不会生成copy assignment了。因为C++不允许“让引用改指向不同对象”。

面对这样的难题,C++的响应是拒绝编译那一行赋值动作。如果你打算在一个“内含引用成员”的class内支持赋值操作,你必须自己定义copy assignment 操作符。面对“内含const成员”的classes,编译器的反应也是一样的。更改const成员是不合法的,所以编译器不知道如何在它自己生成的赋值函数内面对它们。最后还有一种情况:如果某个base class将copy assignment操作符声明为private,编译器将拒绝为其derived class生成一个copy assignment操作符。毕竟编译器为derived classes所生的copy assignment操作符想象中可以处理base class成分,但它们当然无法调用derived class无权调用的成员函数。编译器两手一摊,无能为力。

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)

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

  3. 了解C++默默编写并调用哪些函数

    在C++中,如果你写下 1 classEmpty{-}; 就相当于写下 1 classEmpty{ 2 public: 3 Empty();//default构造函数 4 Empty(constEmp ...

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

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

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

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

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

    其实这一点在C++的基础类入门书,如C++ primer里面也有说过,不过很少有人去注意而已,作者把这一点提出来,是为了提醒我们. 这一条款的内容如下:就是说当你书写下面的[代码片段1]的时候,其实经 ...

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

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

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

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

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

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

最新文章

  1. python本地文件上传到网页_如何将文件上传到pythonweb服务器?
  2. php 表单变量,PHP学习笔记——访问表单变量
  3. java futher多线程_Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap
  4. 【ubuntu】ubuntu18.04:在处理时有错误发生:ufw E: Sub-process /usr/bin/dpkg returned an error code (1)
  5. Redis源码剖析(二)io多路复用函数及事件驱动流程
  6. [BZOJ 3647]
  7. 终于,我读懂了所有Java集合——map篇
  8. C++学习笔记 简单部分
  9. Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
  10. LIO-SAM探秘第三章之代码解析(二) --- featureExtraction.cpp
  11. 摄影测量学——空间后方交会
  12. php内置web server
  13. 【笔记】QCA9531无线校准
  14. 一小时搞定简单VBA编程 Excel宏编程快速上手
  15. ZOJ 3987 Numbers(枚举)
  16. 浅谈链表的构建,next到底是什么
  17. 微信网页调试8.0.19换掉X5内核,改用xweb,所以x5调试方式已经不能用了,现在有了解决方案
  18. 睡觉计算机主机在身旁好么,电脑睡眠和休眠用哪个比较好?
  19. 进程同步问题(Process Synchronization)
  20. Android中注解处理器系列之-简单使用

热门文章

  1. 一个实用的JS自定义函数addLoadEvent()
  2. 利用ettercap进行简单的基于数据库的ARP毒化攻击
  3. building xxx gradle project info的解决办法
  4. zabbix3.x添加H3C网络设备详解
  5. Task.Run Vs Task.Factory.StartNew z
  6. IOS中的多线程之GCD
  7. 没有找到 AUTOBACKUP
  8. SQL:统计一个数据库中所有表记录的数量
  9. repeater中分页aspnetpager是遇到的问题
  10. 08.为什么要使用lombok,它解决了什么问题?