C++关键字-explicit
explicit关键字只能用于修饰类构的造函数,表明该构造函数是显式的,不能用于隐式转换和复制初始化。
- 该关键字只能用来修饰类内部的构造函数;
- 禁止隐式调用拷贝构造函数 ;
- 禁止类对象之间的隐式转换;
- 一般只用于修饰单参构造函数,因为无参构造函数和多参构造函数本身就是显式调用的。
在C++类的实例化过程中,存在一种隐式转换
#include <iostream>
using namespace std;
class Point {
public:
int x, y;
Point(int x = 0, int y = 0) : x(x), y(y) {}
};
void displayPoint(const Point& p)
{
cout << "(" << p.x << "," << p.y << ")" << endl;
}
int main()
{
// 显式调用
Point p0(1);
Point p1(1, 2);
Point p2 = Point(1, 2);
displayPoint(Point(1, 2));
// 隐式转换
Point p3 = 1;
Point p4 = (1, 2);
displayPoint(1);
displayPoint((1, 2));
displayPoint({1, 2});
}
默认情况下,上面代码可以编译通过 加上explicit后,禁止隐式转换,编译无法通过
class Point {
public:
int x, y;
explicit Point(int x = 0, int y = 0) : x(x), y(y) {}
};