考虑以下代码:
int main()
{
signed char a = 10;
a += a; // Line 5
a = a + a;
return 0;
}
我在第5行收到此警告:
d:\ codes \ operator cast \ operator cast \ test.cpp(5):警告C4244:'+ =' :从'int'转换为'signed char',可能丢失数据
这是否意味着+ =运算符将右手运算符隐式转换为int
?
P.S:我正在使用Visual Studio 2005
修改:仅当警告级别设置为4
时才会出现此问题答案 0 :(得分:7)
您所看到的是整体推广的结果。
整数提升适用于涉及整数类型的大多数二进制表达式的两个参数。这意味着在执行操作之前,任何比int
更窄的整数类型都会被提升为int
(或可能是unsigned int
)。
这意味着a += a
作为int
计算执行,但由于结果存储回a
char
,结果必须进行缩小转换因此警告。
答案 1 :(得分:0)
真的,这条线不应该有任何警告。运算符+ =非常适合所有基本类型。我会把它作为VC ++ 2005的一个小错误。