我最近遇到下面的代碼來使用語法CHAR()我以前從未見過:C/C++:用作功能
std::cout << char('A'+i);
代碼的行爲是相當明顯的:它僅僅是打印一個字符轉換爲stdout,其值由ASCII表中'A'的位置加上計數器i的值(unsigned int類型)。
例如,如果i = 5,則上面的行將打印字符'F'。
我從來沒有見過字符用作函數之前。我的問題是:
- 此功能特定於C++還是它已經存在嚴格的C?
- 是否有使用char()作爲函數的技術名稱?
我最近遇到下面的代碼來使用語法CHAR()我以前從未見過:C/C++:用作功能
std::cout << char('A'+i);
代碼的行爲是相當明顯的:它僅僅是打印一個字符轉換爲stdout,其值由ASCII表中'A'的位置加上計數器i的值(unsigned int類型)。
例如,如果i = 5,則上面的行將打印字符'F'。
我從來沒有見過字符用作函數之前。我的問題是:
這不是一個函數調用,而是一個類型轉換。更通常它寫作爲
std::cout << (char)('A'+i);
這使得它清楚它不是一個函數調用,但您的版本也是如此。請注意,您的版本只能在C++中有效,而上面的版本可以在C和C++中使用。在C++中,你也可以更加明確地寫出
std::cout << static_cast<char>('A'+i);
改爲。 不是因爲'A'+i
將具有類型int
而必須打印爲整數。如果你想把它解釋爲一個字符代碼,你需要使用char
。
這是C++轉換語法。以下是等價的:
std::cout << (char)('A' + i); // C-style cast: (T)e
std::cout << char('A' + i); // C++ function-style cast: T(e); also, static_cast<T>(e)
Stroustroup的的C++編程語言(第3版,第131頁。)調用第一類C樣式轉換,第二型函數樣式轉換。在C++中,它相當於static_cast<T>(e)
表示法。功能風格的轉換在C中是不可用的。
感謝您的解釋。我的下一個問題就是擁有多種類型演員的目的是什麼。看起來我還有更多的研究要做。這裏是一個相關的問題/答案我將開始閱讀:http://stackoverflow.com/questions/4474933/what-exactly-is-or-was-the-purpose-of-c-function-style-casts – user2150989
Stroustroup先生(C++的創造者)不喜歡C風格的演員 - 它肯定是危險的,因爲它的效果很大程度上取決於它轉換的內容;也就是說,從簡單的檢查中,很難知道將要發生的確切轉換。所以他添加了幾個函數樣式的變體,包括[這個問題]中的所有類型(http://stackoverflow.com/questions/332030) – tucuxi
K&R的「The C programming language」堅持只能通過'(type)value'執行強制轉換,並且不會描述「type(value)'語法在所有。因此,我認爲這是一個C++擴展。 – tucuxi
@tucuxi,你可能是正確的,編輯反映。 – toth