C(++) short 减去 short = int?

C(++) short subtracting short = int?

有如下代码:

short a = 5;
short b = 15;
short c = 25;

short d = std::min(a, b);
short e = std::min(a, b-c); // Error

最后一行无法编译,声称没有匹配参数 "short, int" 的 min() 重载。

出现这种情况的原因是什么? 我知道 b-c 的结果可能不再适合做空。但是,如果我使用 INT,那将是相同的,并且它不会自动形成 LONG 或任何强制执行它适合的东西。

只要我确定得到的数字永远不会超过SHORT的范围,我用static_cast<short>(b-c)就安全了,对吧?

非常感谢!

原因:整数提升。如果类型小于 int,它会自动提升为 int。这对有符号数没有什么影响,因为溢出是未定义的,但对于溢出回绕的无符号数,这允许编译器为大多数处理器发出更少的代码。

大多数时候,这会自动回退,因为分配给较窄的变量不是错误。不过,您碰巧发现了一个确实会导致问题的案例。

如果你确定它合适,就把它扔回去。