這個問題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是錯誤的還是我的邏輯有缺陷?
班次很特殊。 –
Visual Studio 2015.也就是說,我99.9%確定我們在升級之前得到了與VS 2010相同的警告,並且VS 2017的快速測試也給出了相同的警告。 – dgnuff