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

标签 c++ types int short

<分区>

有如下代码:

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。这对有符号数几乎没有影响,因为溢出是未定义的,但对于溢出回绕的无符号数,这允许编译器为大多数处理器发出更少的代码。

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

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

关于c++ - C(++) short 减去 short = int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57846966/

相关文章:

c++ - 如何编译 Freetype (2) 和 Harfbuzz (with visual studio) 让它们协同工作?

jquery - 如何使用jquery获取输入类型?

javascript - Typescript 接口(interface)未捕获类型错误 : Cannot set property

int - 'NSNumber' 不能转换为 'Int' Swift

java - 不兼容类型 : int and <nulltype>

c++ - C++可变范围问题

c++ - 具有 'this' 指针的类的大小

c++ - boost 图形库定向 multimap edge_range 错误

haskell - Monad 理论和 Haskell

C++ 帮助将字符串转换为 uint8_t