C++编译器默默编写并调用哪些函数
什么时候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++编译器默默编写并调用哪些函数相关推荐
- EffectiveC++详解:条款05-了解C++默默编写并调用哪些函数
文章目录 条款05-了解C++默默编写并调用哪些函数 当我们写了一个空类,意味着什么 编译器什么时候拒绝生成拷贝赋值运算符 总结 @Author:CSU张扬 @Email:csuzhangyang@g ...
- 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++默默编写 ...
- 了解C++默默编写并调用哪些函数
在C++中,如果你写下 1 classEmpty{-}; 就相当于写下 1 classEmpty{ 2 public: 3 Empty();//default构造函数 4 Empty(constEmp ...
- Effective C++条款05:了解C++默默编写并调用哪些函数
class Empty{};class Empty{Empty(){};Empty(const Empty& rhs){};~Empty(){};Empty& operator=(co ...
- 条款05:了解C++默默编写并调用哪些函数
空类 如果你没有声明,编译器会为它声明一个default构造函数,copy构造函数,析构函数,赋值操作符. class Empty{}; //--------- class Empty { publi ...
- [Effective C++读书笔记]005_条款05_了解C++默默编写并调用哪些函数
其实这一点在C++的基础类入门书,如C++ primer里面也有说过,不过很少有人去注意而已,作者把这一点提出来,是为了提醒我们. 这一条款的内容如下:就是说当你书写下面的[代码片段1]的时候,其实经 ...
- 条款5:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls)...
1.default costructor / copy constructor / copy assignment 者三者的区别? 特别是copy constructor & copy as ...
- Effective C++:条款05:了解C++默默编写并调用哪些函数 (Know what functions C++ silently writes and calls.)...
编译器可以暗自为class创建default构造函数.copy构造函数.copy assignment操作符,以及析构函数. 转载于:https://www.cnblogs.com/elite/arc ...
- Effective C++ 学习笔记 条款05 了解C++默默编写并调用了哪些函数
当写下一个空类时,编译器会为你合成一个拷贝构造函数.一个拷贝赋值运算符.一个析构函数,如没有声明其他的构造函数,编译器会合成一个默认构造函数.这些都是inline的public成员. 当类有一个引用成 ...
最新文章
- python本地文件上传到网页_如何将文件上传到pythonweb服务器?
- php 表单变量,PHP学习笔记——访问表单变量
- java futher多线程_Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap
- 【ubuntu】ubuntu18.04:在处理时有错误发生:ufw E: Sub-process /usr/bin/dpkg returned an error code (1)
- Redis源码剖析(二)io多路复用函数及事件驱动流程
- [BZOJ 3647]
- 终于,我读懂了所有Java集合——map篇
- C++学习笔记 简单部分
- Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
- LIO-SAM探秘第三章之代码解析(二) --- featureExtraction.cpp
- 摄影测量学——空间后方交会
- php内置web server
- 【笔记】QCA9531无线校准
- 一小时搞定简单VBA编程 Excel宏编程快速上手
- ZOJ 3987 Numbers(枚举)
- 浅谈链表的构建,next到底是什么
- 微信网页调试8.0.19换掉X5内核,改用xweb,所以x5调试方式已经不能用了,现在有了解决方案
- 睡觉计算机主机在身旁好么,电脑睡眠和休眠用哪个比较好?
- 进程同步问题(Process Synchronization)
- Android中注解处理器系列之-简单使用
热门文章
- 一个实用的JS自定义函数addLoadEvent()
- 利用ettercap进行简单的基于数据库的ARP毒化攻击
- building xxx gradle project info的解决办法
- zabbix3.x添加H3C网络设备详解
- Task.Run Vs Task.Factory.StartNew z
- IOS中的多线程之GCD
- 没有找到 AUTOBACKUP
- SQL:统计一个数据库中所有表记录的数量
- repeater中分页aspnetpager是遇到的问题
- 08.为什么要使用lombok,它解决了什么问题?