答:标明类的构造函数是显式的,不能进行隐式转换。
默认行为:隐式类型转换
在没有 explicit
修饰的情况下,单参数构造函数会被编译器视为隐式类型转换构造函数,可以用于从参数类型隐式转换为目标类型的对象。
示例:
#include <iostream>
using namespace std;class Example {
public:Example(int x) { // 单参数构造函数cout << "Constructor called with x = " << x << endl;}
};int main() {Example obj1 = 42; // 隐式调用单参数构造函数return 0;
}
输出:
Constructor called with x = 42
在这里,42
被隐式转换为 Example
类型的对象。
使用 explicit
防止隐式转换
通过在构造函数前加上 explicit
关键字,可以禁止隐式类型转换。
示例:
#include <iostream>
using namespace std;class Example {
public:explicit Example(int x) { // 加上 explicitcout << "Constructor called with x = " << x << endl;}
};int main() {// Example obj1 = 42; // 错误:不能进行隐式类型转换Example obj2(42); // 正确:显式调用构造函数return 0;
}
输出:
Constructor called with x = 42
解析:
- 使用
explicit
后,必须通过显式调用Example(42)
创建对象,Example obj1 = 42
将不被允许。