10

這個問題Implicit type conversion rules in C++ operators(和其他幾個人)狀態隱式轉換:以下警告是否有效?

如果任是很長很長unsigned int類型的其他被提升爲長長 unsigned int類型

但是,如果我做了MSVC下以下幾點:

unsigned int a = <some expression>; 
unsigned long long b = a << 32ULL; 

第二行生成下列警告:

warning C4293: '<<': shift count negative or too big, undefined behavior 

32ULL是一個64位無符號值,因此根據隱式轉換規則,這應該意味着a也轉換爲unsigned long long。因此,我將64位值移動了32位,顯然是一個明確定義的操作。

MSVC是錯誤的還是我的邏輯有缺陷?

+1

班次很特殊。 –

+0

Visual Studio 2015.也就是說,我99.9%確定我們在升級之前得到了與VS 2010相同的警告,並且VS 2017的快速測試也給出了相同的警告。 – dgnuff

回答