600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > [Effective C++读书笔记]005_条款05_了解C++默默编写并调用哪些函数

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

时间:2023-03-27 16:40:38

相关推荐

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

其实这一点在C++的基础类入门书,如C++ primer里面也有说过,不过很少有人去注意而已,作者把这一点提出来,是为了提醒我们。

这一条款的内容如下:就是说当你书写下面的【代码片段1】的时候,其实经过编译器处理后,你所书写的代码本质上是【代码片段2】:

代码片段1(你亲自手写的):

1 class A{2 3 };

代码片段2(编译器帮你生成的):

1 class A{2 public:3A() { ... }4A(const A& rhs) { ... }5~A() { ... }6 7A& operator =(const A& rhs) { ... }8 };

从上面可以看出来,编译器为我们补充声明了:

1. 无参构造函数

2. 拷贝构造函数

3. 析构函数

4. 赋值操作符=

在本条款中,作者又说明了另外一点,那就是关于赋值操作符=的生成规则,到底是生成呢,还是不生成呢?我们来看两个例子:

1 #include <iostream> 2 using namespace std; 3 4 class A{ 5 }; 6 7 int main(){ 8A a1; 9A a2;10a1 = a2;11return 0;12 }

结果:编译运行成功!

1 #include <iostream> 2 using namespace std; 3 4 class A{ 5 public: 6int value; 7const int constValue; 8A(int v):constValue(v){} 9 };10 11 int main(){12A a1(10);13A a2(20);14a1 = a2;15return 0;16 }

结果:编译失败,提示“Error:没有与这些操作数匹配的‘=’运算符”。

这说明了:

当类中有引用,常量定义时,编译器不会为其生成‘=’运算符的函数。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。