C++中的空类,编译器默认可以产生哪些成员函数

C++中创建一个空类:
class Empty {};
默认会生成4个函数,其函数的原型如下:

public: Empty() { ... }

Empty(const Empty& rhs) { ... }

~Empty() { ... }

Empty& operator=(const Empty& rhs) { ... }

说明:1) 这些函数只有在需要调用的时候,编译器才会生成。

2) 4个函数都是public的。

3) 4个函数都是inline的(即函数定义在类的定义中的函数)。

4) 如果你显式的声明了这些函数中的任何一个函数,那么编译器将不再生成默认的函数。

比如,当遇到下列语句时,函数会被编译器生成:

Empty e1; //默认构造函数

//对象销毁时,析构函数Empty e2(e1); //

拷贝构造函数e2 = e1; //赋值运算符

另外,还存在两种默认的函数:就是取地址运算符和取地址运算符的const版本,这两个函数在《Effective C++》中没有提及。

public: Empty* operator&() { ... }

const Empty* operator&() const { ... }

这两个函数是确实存在的,正如下面的代码可以正常工作:

#include <stdio.h>class Empty {};

int main(int argc, char** argv)

{ Empty a;

const Empty *b = &a; printf("%p/n", &a); //调用取地址运算符

printf("%p/n", b); //调用const取地址运算符}

一个容易被忽略的问题:自定义的拷贝构造函数不仅会覆盖默认的拷贝构造函数,也会覆盖默认的构造函数。下面的代码是编译不过的,用户必须再显式的定义一个无参的构造函数。

class Empty {

public: Empty(const Empty& e) { }

//拷贝构造函数};

int main(int argc, char** argv){ Empty a;}

C++中的空类,默认产生哪些类成员函数? 这个问题通常会作为笔试来靠你,如果你记忆好的话,我会建议你把答案背下来。会产生六个默认函数,依次为 缺省构造函数,拷贝构造函数,析构函数,赋值运算符,取址运算符,取址运算符 const class Empty { public: Empty(); // 缺省构造函数 Empty( const Empty& ); // 拷贝构造函数 ~Empty(); // 析构函数 Empty& operator=( const Empty& ); // 赋值运算符 Empty* 阅读详情

相关推荐

从零配置XDMA:手把手教你PCIe BAR与AXI总线的地址转换(基于Vivado2023)

本文基于Vivado2023,手把手教你配置XDMA IP核,深入解析PCIe BAR与AXI总线地址转换的核心原理。通过实战步骤,详细说明如何正确设置BAR参数(如32/64位、预取使能)及地址映射,确保主机能稳定访问FPGA侧寄存器与内存,是解决PCIe通信调试难题的关键指南。

2w3e4r5t6y的博客 1213

C++空类

<br />定义一个空的C++类,例如<br />class Empty<br /> {<br /> }<br />一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,一般编译过去就相当于<br />class Empty<br /> {<br /> public:<br /> Empty(); // 缺省构造函数<br /> Empty( const Empty& ); // 拷贝构造函数<br /> ~Empty(); // 析

marken 2389

FFmpeg HDR视频转SDR视频命令

之前蓝光盘电影多是AVC 1080p 8bit SDR格式视频,近两年4K电影流行,下载的蓝光电影多是HEVC 2160p 10bit HDR视频格式。 ffprobe查看有如下属性: # 10bit HDR Stream #0:0(eng): Video: hevc (Main 10), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x2160 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 23.98

彼此当年少,莫负好时光 1万+

面试 - C++中的空类会产生哪些类成员函数

例如,如下的一个空类: class Empty { public: }; 对于一个类,编译器默认产生如下成员函数: 1)默认构造函数, 如果没有定义 ---- https://blog.youkuaiyun.com/qq_35865125/article/details/88372791 2)默认析构函数, 如果没有定义 --- https://blog.youkuaiyun.com/qq_...

Peace 441

使用pytorch构建LSTM_AE模型的两种方式

2.基本LSTM_Unit计算——基本LSTM_AE结构 3.自定义LSTM_Unit计算——自定义LSTM_AE结构 1.LSTM-Encoder-Decoder模型结构及简要解析 图基本lstm计算单元

qq_37840762的博客 7274

Keil5芯片包下载后无法识别?手把手排查教程

遇到Keil5芯片包下载后不被识别的问题别慌,常见原因包括安装路径错误或包未正确注册。通过检查Pack Installer状态和手动更新设备支持列表,轻松排查故障,确保开发环境正常运行。

weixin_35459464的博客 878

C++中空类详解

、空类,声明时编译器不会生成任何成员函数 对于空类,编译器不会生成任何的成员函数,只会生成1个字节的占位符。 有时可能会以为编译器会为空类生成默认构造函数等,事实上是不会的,编译器只会在需要的时候生成6个成员函数:一个缺省的构造函数、一个拷贝构造函数、一个析构函数、一个赋值运算符、一对取址运算符和一个this指针。 1代码: 分析:类A是空类,但空类同样可以被实例化,而每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得

whl0071的专栏 334

AutoSAR配置与实践(深入篇)5.4 OS原理(下 )- 内存保护(MPU)

ECU可能由内部模块、第三方模块等各模块集成的。需求对每个模块所定义的安全等级可能有差异,需要考虑不同安全等级的模块和代码间减少相互干扰,防止程序错误传播。可以理解为包含Task、Alarm、Counter、Schedule table、ISRs、Event等基本对象的容器,用于隔离Task/Alarm等,进行内存保护。

nihaoljq2010的博客 3536

c++空类默认生成的六个函数

c++类的六个默认生成函数。

qq_58158950的博客 1053

华为OD机试 新系统 双机位C卷 往年真题 机考题库(持续收录中)以及算法考点详解

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 7万+

【ACP】2025-最新-疑难题解析-1

即用户手动释放时,因实例释放保护开启,不会释放该 ECS 实例(不同云厂商具体实现有差异,但题目场景下选 C )。结合题目中标记,答案为。综上,答案选 B。综上,答案选 C。综上,答案选 D。综上,答案选 A。综上,答案选 A。综上,答案选 C。综上,答案选 D。综上,答案选 A。

jundao1997的专栏 364

【C++缺省函数】 空类默认产生的6个类成员函数

1、缺省构造函数。 2、缺省拷贝构造函数。 3、 缺省析构函数。 4、缺省赋值运算符。 5、缺省取址运算符。 6、 缺省取址运算符 const。 class A { public: A(){}//缺省构造函数 A(const A&){}//拷贝构造函数 ~A(){}//析构函数 A&ope

Irean_Lau的专栏 4848

C#实战YOLO26物体检测:从ONNX模型转换到工业级部署全复盘

本文介绍了在C#上位机中集成YOLO26模型实现工业产线零件检测的实战方案。针对工业场景对实时性(单帧推理≤100ms)、轻量化和易部署的需求,选择YOLO26模型相比YOLOv8在推理速度提升30%且模型体积更小。文章详细拆解了从模型转换(PyTorch转ONNX)、C#推理引擎封装到部署优化的全流程,重点解决了ONNX兼容性、坐标偏移、GPU降级等工业落地中的典型问题。通过解耦设计、性能优化和异常处理机制,最终在工控机(i5-8500+GTX1650)上实现60ms的单帧推理速度,为工业检测项目提供了可

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1325

C++ 空类,默认产生哪些成员函数

C++ 空类,默认产生哪些成员函数。     默认构造函数、默认拷贝构造函数、默认析构函数、默认赋值运算符 这四个是我们通常大都知道的。但是除了这四个,还有两个,那就是取址运算符和 取址运算符 const 即总共有六个函数。     一个示例如下: 1: class Empty 2:   3: { 4:   5: public:

fox1987的专栏 1590

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: AMD规范:简单而优雅的动态载入JavaScript代码
下一篇: C++中的空类,编译器默认可以产生哪些成员函数
wangran51
博客等级 码龄17年 453粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值