使用+ =运算符时隐式转换?

时间:2010-06-17 11:25:34

标签: c++ operators

考虑以下代码:

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

时才会出现此问题

2 个答案:

答案 0 :(得分:7)

您所看到的是整体推广的结果。

整数提升适用于涉及整数类型的大多数二进制表达式的两个参数。这意味着在执行操作之前,任何比int更窄的整数类型都会被提升为int(或可能是unsigned int)。

这意味着a += a作为int计算执行,但由于结果存储回a char,结果必须进行缩小转换因此警告。

答案 1 :(得分:0)

真的,这条线不应该有任何警告。运算符+ =非常适合所有基本类型。我会把它作为VC ++ 2005的一个小错误。