1. C++ explicit 关键字详解
【导读】:如何防止C++构造函数的隐式转换,explicit关键字可以帮助我们解决问题。
1.1 explicit关键字的作用
关键字explicit可以阻止隐式转换的发生。
例如: C++中只带有一个参数的构造函数,或者或者除了第一个参数外其余参数都有缺省值的多参构造函数,承担了两个角色:
1.用于构建单参数的类对象。
2.隐含的类型转换操作符。
例如:一个类A的构造函数A(int i)就是,既可以用来作为构造器,又可以实现隐式转换A a=1;因为1可以通过构造函数A(int i)转换为一个类A的对象。(隐含的类型转换操作符)
但有时我们并不想让他进行隐式类型转换,这时C++的explicit关键字就起到作用了。
注意:当类的声明和定义分别在两个文件中时,explicit只能写在在声明中,不能写在定义中。
下面我将为大家介绍三种使用explicit关键字的情况:
1.2 类型转换函数
#include<iostream>
using namespace std;
class Fraction{
public:
Fraction(int numerator, int denominator = 1): m_numerator(numerator),m_denominator(denominator) {}
operator double() const{
return (double)m_numerator/m_