C++ 笔记1——explicit关键字、构造函数与对象初始化

本文探讨了C++中的explicit关键字及其在防止隐式转换中的作用,同时阐述了构造函数在对象初始化和复制构造函数在拷贝初始化中的角色。强调了拷贝构造函数并非仅用于拷贝初始化,并举例说明了隐式转换在参数传递中的应用及限制。
摘要由CSDN通过智能技术生成
创建: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值