博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
effective c++条款5 了解编译器默认编写那些函数
阅读量:7191 次
发布时间:2019-06-29

本文共 1030 字,大约阅读时间需要 3 分钟。

  1. 一个空类里面都默认包含那些函数

    . 构造函数
    · 拷贝构造函数
    . 析构函数
    . 赋值操作符重载
    . 取地址运算符重载
    . const取地址运算符

  2. 什么条件下编译器不会默认合成赋值操作符重载,和默认构造函数

    . 当成员变量包含const成员变量时,因为const成员变量只能被在初始化列表初始化,不能被赋值,所以也不会合成默认构造函数
    . 当成员变量包含引用时,因为引用只能引用一个实体,并且引用必须在初始化列表中被初始化,所以也不会合成默认构造函数
    . 当成员变量包含有类成员变量并且该类有自己编写的构造函数,则编译器不会默认合成构造函数,需要自己写。
    详情见代码:

#include
using namespace std;class A{public:private: int &b;};int main(){ A a;//error C2512: “A”: 没有合适的默认构造函数可用 A b;//error C2512: “A”: 没有合适的默认构造函数可用 a = b;//error C2582: “operator =”函数在“A”中不可用 system("pause");}
#include
using namespace std;class A{public:private: const int b;};int main(){ A a;//error C2512: “A”: 没有合适的默认构造函数可用 A b;//error C2512: “A”: 没有合适的默认构造函数可用 a = b;//error C2582: “operator =”函数在“A”中不可用 system("pause");}
#include
using namespace std;class B{public: B(int c) :_c(c) {}private: int _c;};class A{private: B b;};int main(){ A a;//error C2512: “A”: 没有合适的默认构造函数可用 system("pause");}

转载于:https://www.cnblogs.com/readlearn/p/10806509.html

你可能感兴趣的文章
sqlserver 计算数据库时间差
查看>>
SQL 存储过程使用
查看>>
Gradle 配置国内镜像
查看>>
php实现排列组合
查看>>
Hibernate入门第二课 Hibernate Tools for Eclipse Plugins安装
查看>>
Redis配置文件详解
查看>>
python学习day4之路文件的序列化和反序列化
查看>>
ArrayList和LinkedList区别及性能测试
查看>>
高精度模板
查看>>
mysql5.7 多级主从+multisource
查看>>
linux 查看文件夹大小 du命令
查看>>
Web前端性能优化之反向代理
查看>>
linux中cron用法
查看>>
Java后台获取Html5拍照的照片并下载的实例方法
查看>>
android根据包名打开另一个app的两种方法
查看>>
LeetCode.933-最近通话次数(Number of Recent Calls)
查看>>
探讨android更新UI的几种方法(转)
查看>>
WEB.xml配置文件解读
查看>>
业务流程管理软件架构分析
查看>>
基于zookeeper的MySQL主主负载均衡的简单实现
查看>>