请考虑以下代码:
int main()
{
signed char a = 10;
a += a; // Line 5
a = a + a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在第5行得到这个警告:
d:\ codes\operator cast\operator cast\test.cpp(5):警告C4244:'+ =':从'int'转换为'signed char',可能丢失数据
这是否意味着+ =运算符使右手运算符隐式转换为int?
PS:我正在使用Visual Studio 2005
编辑:仅当警告级别设置为4时才会出现此问题
您所看到的是整体推广的结果.
积分提升适用于涉及整数类型的大多数二进制表达式的两个参数.这意味着在执行操作之前,任何比a更窄的整数类型int都会被提升为int(或可能unsigned int).
这意味着,a += a作为一个进行int计算,但因为该结果存储回a其是char结果必须经历收缩转换,因此警告.