2013-05-26 33 views
8

鑑於這種代碼,是unsigned short + int類型的實現定義?

unsigned short us = 0; 
int i = 0; 
auto sum = us + i; 

sum實現定義的類型?我讀的C++ 11標準說是的:

  • 5.7/1表示通常的算術轉換應用。
  • 4.13/1子彈2和3表示int的等級大於無符號短的等級。
  • 5/9 bullet 5 subbullet 4表示如果int可以表示無符號短整型的所有值,則將無符號短整型轉換爲int,並且sum的類型爲int。
  • 5/9 bullet 5 subbullet 5表示如果int無法表示無符號短整型中的所有值,則兩個操作數都轉換爲無符號整型,並且sum的類型爲unsigned int。

如果上述分析是合法的,則意味着使用auto來聲明使用內置類型的算術表達式初始化的變量可能導致實現定義的結果。我猜這會讓很多程序員感到驚訝,以上sum的類型不完全由標準決定。

我的推理是否合法?

+1

嗯,這是一種「完全確定」後,你諮詢了你的平臺的類型特徵... –

+0

這意味着它不完全確定的標準:-) – KnowItAllWannabe

+2

換句話說,如果它*完全由該標準,那麼你可以拋出整個算術轉換部分,並用一個簡單的矩陣代替它,告訴你實際的結果類型。你的'sum'的類型是'std :: common_type :: type',它的值是... –

回答

0

該類型是特定於實現的,但未實現定義。實現定義意味着實現必須記錄它的功能。

+0

我接受這個答案,但我鼓勵讀者查看關於原始問題的意見以獲取更多信息。 – KnowItAllWannabe

+0

標準關於實施定義行爲的規範對於任何必需的文檔必須採取的形式以及它的具體含義都比較模糊。指定'int'和'unsigned short'範圍(如標準所要求的)的實現將指示涉及這些類型的操作必須如何操作。 – supercat

相關問題