通俗易懂的解釋:隱式轉換 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