第五篇:你“ 看不見 ” 的隱式轉換

穆晨發表於2017-01-26

前言

       對於隱式轉換,想必你已經瞭解了算數轉換中的“ 向上對齊 ”的概念;瞭解了賦值隱式轉換的規律( 右值型別轉換為左值型別 )。但C++中的隱式轉換遠不止這些,本文就將告訴你一些容易被忽略,但事實上發生了的隱式轉換。

陣列轉換為指標

       在許多情況下,陣列都隱式轉換為了指標。取陣列元素的過程就是根據首元素和元素序號以及元素大小到指定位置取值;陣列作為函式引數傳遞給函式的過程中也轉換成了指向首元素的指標。當然,在一些其他的場合,隱式轉換未必發生,比如sizeof( 陣列 )就不會隱式轉換為sizeof( 指標 )。

邏輯判斷中其他變數向布林型別隱式轉換

       if ( p ), while ( p ),在很多情況下我們都看到這樣的語句( p通常是指標 )。這裡其實發生了隱式轉換,當p不為NULL或者不為0,則p轉換成了1作為邏輯判斷條件;當p為NULL或者0,則p轉換成了0作為邏輯判斷條件。

邏輯判斷中流物件向布林型別的轉換

       while ( cin >> s );這是我們在獲取使用者輸入時常使用的語句,根據cin流獲取變數後的狀態,它將轉換為布林型別的0或者1。

列舉變數或者成員用於計算時隱式轉換為整型

       列舉變數或者成員常作為整型出現在算式中,這種情況下,列舉變數或型別都是先向上轉換為整型再帶入式子計算。

說明

       1. 有很多A到B發生了隱式轉換的過程會被誤解為A就是B,這是不對的。

       2. 除了本文所列舉的,隱式轉換的情形還有很多。

相關文章