C++中的关键字explicit
C++提供了关键字explicit,声明为explicit的构造函数不能在隐式转换中使用。
无explicit关键字
class Fraction
{
public:
Fraction(int num, int den =1) : m_numerator(num), m_denominator(den) {};
Fraction operator+(const Fraction& f) {
return Fraction(......);
}
private:
int m_numerator;
int m_denominator;
}
Fraction f(3, 5);
Fraction d = f + 1; //调用 non-explicit 将1 转换为Fraction(4, 1),再调用operator+
在构造函数前加上explicit关键字
class Fraction
{
public:
explicit Fraction(int num, int den =1) : m_numerator(num), m_denominator(den) {};
Fraction operator+(const Fraction& f) {
return Fraction(......);
}
private:
int m_numerator;
int m_denominator;
}
Fraction f(3, 5);
Fraction d = f + 1; //[Error] 不能调用构造函数将1转换为Fraction类