Mih*_*dor 8 c++ gcc type-conversion char bitwise-operators
-Wconversion编译此程序时,GCC参数会从标题中生成警告:
#include <iostream>
#include <array>
#include <string>
int main ()
{
std::string test = "1";
std::array<unsigned char, 1> byteArray;
byteArray[0] = byteArray[0] | test[0];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我如何编译它:g++- -Wall -Wextra -Wconversion -pedantic -std=c++0x test.cpp我正在使用GCC 4.5.
我在这里做违法的事吗?在某些情况下会引起问题吗?为什么产品会|产生int?
我在这里做违法的事吗?
您正在从签名类型转换为无符号类型.如果有符号值为负,则无符号结果将是一个赋值定义的非负值(因此与初始值不同).
在某些情况下会引起问题吗?
仅当值可能为负时.在某种奇特的架构上可能就是这种情况sizeof (char) == sizeof (int),或者如果你的代码做的事情比将两个值组合起来更复杂|.
为什么产品会
|产生int?
因为所有整数值在用于算术运算之前都会被提升.如果他们的类型小于int,则将他们提升为int.(促销比这更多,但这是与这个问题相关的规则).