【QT】-隐式转换 explicit用法
通俗易懂的解释:隐式转换 vs 显式转换
-
什么是隐式转换?
隐式转换就是编译器偷偷帮你做的类型转换,你甚至都没意识到它发生了。
例子:
cpp
运行
double x = 5; // 隐式:int → double(5 变成 5.0)
int y = x * 2.5; // 隐式:double → int(截断小数部分) -
构造函数的隐式转换
当构造函数只有一个必需参数时,编译器可能会用它来偷偷创建对象。
示例(无 explicit):
cpp
运行
class Pizza {
public:
Pizza(int size) { // 单参数构造函数
cout << “制作了一个” << size << “寸的披萨” << endl;
}
};
void orderPizza(Pizza p) {
cout << “订购成功!” << endl;
}
int main() {
orderPizza(12); // 隐式转换:int → Pizza
// 等价于:orderPizza(Pizza(12));
}
问题:你原本只想传一个数字,但编译器偷偷创建了一个 Pizza 对象,可能导致意外行为。
3. explicit 禁止隐式转换
加了 explicit 后:
cpp
运行
class Pizza