再学C++ | 理解 explicit 关键字的作用

在C++中,explicit是一个关键字,用于修饰类的构造函数。当一个构造函数被声明为explicit时,它将禁止隐式类型转换。默认情况下,C++编译器允许使用构造函数进行隐式类型转换。例如,如果一个类有一个参数的构造函数,而在代码中使用了该类对象的参数,则编译器会自动调用该构造函数进行类型转换。
以下是一个简单的示例:

class MyNumber {
public:
    MyNumber(int value) : m_value(value) {}
    int getValue() const { return m_value; }
private:
    int m_value;
};

void printNumber(MyNumber num) {
    std::cout << num.getValue() << std::endl;
}

int main() {
    printNumber(10); // 隐式类型转换
    return 0;
}

在上述代码中,printNumber函数接受一个MyNumber对象作为参数,但是在调用函数时直接传递了一个int类型的参数。由于MyNumber类有一个参数为int类型的构造函数,编译器会自动进行隐式类型转换,将int类型转换为MyNumber对象。然而,如果将构造函数声明为explicit,则禁止这种隐式类型转换,需要使用显式的类型转换操作符进行转换:

class MyNumber {
public:
    explicit MyNumber(int value) : m_value(value) {}
    int getValue() const { return m_value; }
private:
    int m_value;
};

int main() {
    MyNumber number = 10; // 错误,禁止隐式类型转换
    MyNumber number2(10); // 正确,使用显式类型转换
    return 0;
}

通过将构造函数声明为explicit,可以避免一些潜在的错误和歧义,提高代码的安全性和可读性。同时,显式地进行类型转换可以更清晰地表达意图,避免了隐式类型转换可能引发的不明确或错误的行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值