鑑於這種代碼,是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
的類型不完全由標準決定。
我的推理是否合法?
嗯,這是一種「完全確定」後,你諮詢了你的平臺的類型特徵... –
這意味着它不完全確定的標準:-) – KnowItAllWannabe
換句話說,如果它*完全由該標準,那麼你可以拋出整個算術轉換部分,並用一個簡單的矩陣代替它,告訴你實際的結果類型。你的'sum'的類型是'std :: common_type :: type',它的值是... –