为什么VC C4244警告(可能丢失数据)具体处理'int'?

Chr*_*mer 3 c++ compiler-warnings visual-c++

下面的代码示例演示了隐式强制转换shortchar触发级别3,而隐式强制int转换char仅触发警告级别4.

int main()
{
    short as = 1;
    int   ai = 1;
    char  b1 = as; // warning C4244 (Level 3)
    char  b2 = ai; // warning C4244 (Level 4)
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是什么原因 - 文档省略了原因?

我在更改变量类型并使用此警告识别可能的转换问题后遇到了此问题.我错过了警告,并认识到我必须切换到4级.

Bo *_*son 5

一个原因可能是涉及较小类型的算术运算实际上是使用提升为整数的值执行的,因此将int结果分配回原始大小稍微合理一些.

为char分配短片几乎总是一个错误.