参考链接:
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);
}