博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++编译器默默编写并调用哪些函数
阅读量:7110 次
发布时间:2019-06-28

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

什么时候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无权调用的成员函数。编译器两手一摊,无能为力。

 

转载地址:http://xslhl.baihongyu.com/

你可能感兴趣的文章
JSF---->其他标签
查看>>
Python应用01 原始Python服务器
查看>>
Add Console Application Program to the MFC Program
查看>>
Oracle中可被并行化执行的SQL操作
查看>>
新的Layout布局系统
查看>>
java链表
查看>>
VC获取操作系统版本和名称
查看>>
iOS: 消息通信中的Notification&KVO
查看>>
FZU Problem 2105 Digits Count
查看>>
禁止复制
查看>>
Accessing Hardware in Silverlight using COM
查看>>
工具箱 - Xshell <2>
查看>>
使用bootstrap和metroui设计的微网站或手机app界面
查看>>
使用GLSL实现更多数量的局部光照 【转】
查看>>
Linux下使用popen()执行shell命令
查看>>
可压Navier-Stokes方程组的爆破现象
查看>>
rundll32命令大全
查看>>
OC 内存管理-02 autorelease 概念 以及用法
查看>>
IPC——匿名管道
查看>>
AsyncSocket长连接棒包装问题解决
查看>>