2016-04-01 121 views
1

該訂單隱式轉換字母C++

char chValue = max('a', '6'); // returns 'a' 

int max(int nX, int nY) 
{ 
return (nX > nY) ? nX : nY; 
} 

鑄信'a'其對應的ASCII碼號碼,然後將其比作整數?

+0

發佈相關代碼 - 什麼是'max'聲明? – MSalters

+0

@ MSalters好吧 –

回答

4

是的,因爲max是一個函數,需要兩個int S作爲參數,炭a將獲得implicitly convertedint,然後獲得通過作爲函數的參數。

+0

是的,它需要2個整數,並返回最大,並感謝 –

+0

@MekacherAnis很高興我能夠幫助。如果它解決了問題/回答了問題,請考慮接受答案。 – blazs

+0

沒有「隱式演員」這樣的事情。演員陣容是*顯式*轉換。 –

3

不完全。

字符常量'a''6'的類型是char,這是一個整數類型。他們已經表示整數值,並假設一個基於ASCII的實現,它們表示這些字符的ASCII值。這是在編譯時確定的。

您的max函數需要兩個int參數並返回int結果。 'a''6'隱含地轉換爲charint。 (此轉換會產生一個具有不同表示形式但值相同的值。)演員表是一個明確的轉換,用C風格的演員操作符(如(int)'a')或其中一個特定於C++的演員操作符(以在static_cast<int>('a')由於intchar都是整數類型,在此不再投。

(在C中,字符常量是int類型,並且不會有任何轉換的。)

intmax()返回的結果然後被隱含地從int轉換爲char,結果存儲在chValue

C++實際上並不需要用ASCII編碼字符。例如,IBM大型機使用稱爲EBCDIC的不同字符集。 (在EBCDIC中,比較將以另一種方式進行,而chValue將是'6'而不是'a'。)