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

bdh*_*har 0 c++ operators

请考虑以下代码:

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时才会出现此问题

CB *_*ley 7

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

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

这意味着,a += a作为一个进行int计算,但因为该结果存储回a其是char结果必须经历收缩转换,因此警告.

  • @PierreBdR:5.17说`A + = B`相当于'A = A + B`; 5.7(加法运算符)表示通常的算术转换是执行的; 5/9表示这意味着双方都会进行整体促销,所以是的,在这种情况下需要进行整体促销. (2认同)