C++ 隐式转换:以下警告有效吗?
这个问题(和其他几个问题)说明了 如果其中一个为long-long unsigned int,则另一个提升为long-long 无符号整数 但是,如果我在MSVC下执行以下操作:C++ 隐式转换:以下警告有效吗?,c++,language-lawyer,bit-shift,integer-promotion,unsigned-long-long-int,C++,Language Lawyer,Bit Shift,Integer Promotion,Unsigned Long Long Int,这个问题(和其他几个问题)说明了 如果其中一个为long-long unsigned int,则另一个提升为long-long 无符号整数 但是,如果我在MSVC下执行以下操作: unsigned int a = <some expression>; unsigned long long b = a << 32ULL; 无符号整数a=; 无符号长b=a移位不会进行所谓的“常规算术转换”,这是您引用的规则。移位的结果是。移位是特殊的。Visual Studio 2015。
unsigned int a = <some expression>;
unsigned long long b = a << 32ULL;
无符号整数a=;
无符号长b=a移位不会进行所谓的“常规算术转换”,这是您引用的规则。移位的结果是。移位是特殊的。Visual Studio 2015。也就是说,我99.9%肯定我们在升级之前收到了与VS 2010相同的警告,而VS 2017的快速测试也给出了相同的警告。这需要语言律师标签。这就是“常用算术转换”和“积分提升”之间的细微差别。它们是不同的东西,但两者都会发生,并且都可能转换值。通过从a到b的赋值,然后将b移位,可以绕过这个问题吗?
warning C4293: '<<': shift count negative or too big, undefined behavior