explicit 用法提醒

参考链接:

C++ 关键字 explicit 的使用

隐式转换,如何消除隐式转换?

Clion提示:Single-argument constructors must be marked explicitly to avoid unintentional implicit conversions 解法办法

https://www.cplusplus.com/doc/tutorial/typecasting/

什么时候会 explicit:

C++面向对象的多态特性,就是通过父类的类型实现对子类的封装。通过隐式转换,你可以直接将 一个子类的对象使用父类的类型进行返回。在比如,数值和布尔类型的转换,整数和浮点数的转换等。 某些方面来说,隐式转换给C++程序开发者带来了不小的便捷。C++是一门强类型语言,类型的检查是 非常严格的。

什么时候搞 explicit:

如果构造函数只接受一个参数,则它实际上定义了转换为此类类型的隐式转换机制。可以通过将构 造函数声明为explicit加以制止隐式类型转换,

 

 自己测试了下:

#include <iostream>
using namespace std;

class Point {
public:
    int x, y;
    explicit Point(int x = 0)
            : x(x) {}
};

void displayPoint(const Point& p)
{
    cout << "(" << p.x << ","
         << ")" << endl;
}

int main()
{
    Point a(3);
    displayPoint(a);
    Point b = 1;  // 注意这里会报错,如果去掉explicit可以运行
    displayPoint(b);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值