explicit 的反义词是 implicit
- explicit是显式的意思
- implicit是隐式的意思
- 没有使用explicit 标注
- 有一个参数的类初始化
使用这个关键字
- 使用在构造函数,如果在构造函数上用了这个关键字,那么这个构造函数就是显式的
如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:
class MyClass {
public:
MyClass(int num){};
};
int main() {
MyClass obj = 10;
}
上面的代码是可以编译通过的,这个隐式转化的过程可以用下面的代码来演示:
MyClass temp(10);
MyClass obj = temp; - 首先是生成一个临时的类
- 然后把临时的类赋给obj
加上 explicit之后,就是告诉编译器,不要替我做隐式转换了。
class MyClass {
public:
explicit MyClass(int num){};
};
int main() {
MyClass obj = 10;
}
[@djt_27_47 ~]$ g++ t_explicit.cc
t_explicit.cc: In function 'int main()':
t_explicit.cc:7: error: conversion from 'int' to non-scalar type 'MyClass' requested输出的错误。
这个c++无中生有的绝技