创建:2018/4/4;最近更新:2018/4/4
写在前面
这几篇笔记不是那种讲解C++基础概念的入门级教程,也不是纷繁复杂、面面俱到的专家级教材。因为这两种资料在网络上或者是出版的书籍上已经够多了。在这里,我主要想记录自己在学习C++过程中遇到的一些细节问题和自己查阅资料之后对这些问题的理解。
C++是一门极其庞大的巨型语言,而我也是C++的初学者,因此我在学习和总结的过程中难免有认识不全面、理解不准确的地方。所以,还请各位大佬能够对本菜鸡笔记中的不足之处多多包涵、多多指正,先在此谢过!
1 莫名其妙的explicit
在很多C++代码中,定义类的构造函数的时候,往往会在前面加一个explicit关键字。先来看cppreference上面对它的解释:
The explicit specifier specifies that a constructor or conversion function (since C++11) doesn't allow implicit conversions or copy-initialization. It may only appear within the decl-specifier-seq of the declaration of such a function within its class definition.
大体意思是说,
用explicit修饰构造函数的作用是禁止隐式转换或复制初始化。那什么是隐式转换和复制初始化呢?这要从类的构造函数和初始化过程说起。
2 构造函数和初始化过程
在C++中,变量的初始化有两种方式:直接初始化(用()运算符,如int a(1);)和复制初始化(用=运算符,如int a = 1;)。在编译和代码运行过程中,这两种初始化是有区别的。先来看一个例子:
// 实例2
#include<ios