为什么我会收到 1I64<<31 的警告?
Why do I receive a warning for1I64<<31?
为什么我收到这个代码的警告?
switch(iInput)
{
...
case 1I64<<31: return 31; break;
...
}
1>C:path-to-file.cpp(44): warning C4309: 'case':截断常量值
1I64<<31是0x0000000080000000 (__int64),所以这里没有截断,大小写有最大值吗?
控制switch
的表达式类型控制case
标签将使用的表达式类型。
您需要在控制表达式中使用__int64
(或等效)类型来消除警告。
C标准(n1256.pdf)规定
6.8.4.2/5对控制表达式. ...
进行整数提升
和
6.3.1.1/2……该值被转换为int型;否则,将其转换为unsigned int…
我的猜测是int
(或unsigned int
)在你的实现是不够大,以容纳64位宽的值。
相关文章:
- 警告处理为错误这里有什么问题
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 使用typeid警告未使用的变量
- 示例C++项目编译中的警告
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 如何修复编译器警告 C6386 和 C6385?
- 返回语句后的代码,没有警告
- 获取隐式转换溢出从无符号到已签名的警告
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型