为什么我收到此代码的警告?
switch(iInput)
{
...
case 1I64<<31: return 31; break;
...
}
1&gt; C:\ path-to-file.cpp(44):警告C4309:'case':截断常量值
1I64&lt;&lt; 31是0x0000000080000000(__ int64)所以这里没有截断, 案件的最大价值是什么?
答案 0 :(得分:5)
控制switch
控件的表达式类型控制了case
标签将使用的表达式的类型。
您需要在控制表达式中使用__int64
(或等效)类型来消除警告。
答案 1 :(得分:3)
C标准(n1256.pdf)声明
6.8.4.2/5对控制表达式执行整数提升。 ...
和
6.3.1.1/2 ...将值转换为int;否则,它将转换为unsigned int ...
我的猜测是,您实现中的int
(或unsigned int
)不足以容纳64位宽的值。