【C++】Digest of 《effective C++》--1
2016-05-08 10:21
363 查看
《effective C++》阅读笔记01
size_t是c++计算个数时使用的某种不带正负号(unsigned)类型。它也是vector,deque和string内的operator[]函数接受的参数类型。分清楚声明式和定义式,对对象而言,定义式是编译器为此对象拨发内存的地点;对function 或function template而言,定义式提供了代码本身。
default构造函数要不没有参数,要不就是每个参数都有缺省值。
class B { public: explicit B(int x = 0, bool b = true); //这也是一个default构造函数 }
构造函数被声明为explicit可以阻止它们被用来执行隐式类型转换,但仍然可以执行显示类型转换。
void dosomething(B object) {...} B oboj1; dosomething(bobj1); //ok,因为dosomething接受的是一个B类型的对象 dosomething(28); //错误,dosomething接受一个B类型的对象,不是一个int, 而int和B之间没有隐式转换 dosomething(B(28)); //ok,用B的构造函数将int显式转换为B类型
因为我们一般不希望编译器执行非预期的类型转换,所以我们鼓励将构造函数声明为explicit
copy构造函数和copy assignment操作符
class A { public: A(); A(const A& a); // copy构造函数 A& operator= (const A& a); //copy assignment操作符 ... }; A a1; A a2 = a1; //调用copy构造函数 a2 = a1; //调用copy assignment操作符
构造一个新的对象时使用的是copy构造函数,而不用构造新对象时的普通赋值则是调用copy assignment操作符。
copy构造函数对于pass-by-value的传递方式是非常重要的。考虑
void func(A a) {...} A a1; func(a1);
这里类型A的对象是pass-by-value,所以a1是被复制进去的,因此会构造一个临时的A对象,这个临时的A对象就是用copy构造函数来完成的。
然而对于自定义类型来说,pass-by-reference是更好的选择。
相关文章推荐
- C语言函数sscanf()的用法
- C语言:关注EOF
- C语言函数fseek, fread, ftell的使用
- C++实验5-数组的分离
- C++ explicit关键字
- c++实验5-数组分离
- C++虚函数
- C++类的静态成员& 赋值vs初始化
- C语言内存的初始化
- C++对象链表的创建与销毁
- 从遗忘到捡起FFT信号处理
- Leetcode 206. Reverse Linked List cpp实现
- 一个简单的飞机订票系统
- C++指针与const
- 用gdb调试C与C++程序
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- C语言查看程序运行的时间
- C语言入门学习视频
- c++作业5