为什么我会收到1I64 << 31的警告?

cpr*_*mer 2 c c++

为什么我收到此代码的警告?

switch(iInput)
{
   ...
   case 1I64<<31:   return 31;  break;
   ...
}
Run Code Online (Sandbox Code Playgroud)

1> C:\ path-to-file.cpp(44):警告C4309:'case':截断常量值

1I64 << 31 0x0000000080000000(__int64),所以这里没有截断,它的存在对案件的最大价值?

Mic*_*urr 5

switch控制case标签将使用的表达式类型的控件的表达式类型.

您需要__int64在控制表达式中使用(或等效)类型来消除警告.