繁体   English   中英

C ++语言标准对static_cast如何处理减小整数大小有何看法?

[英]What does the C++ language standard say about how static_cast handles reducing the size of an integer?

我想了解C ++语言标准为以下情况指定的规则:

long x = 200;
short y = static_cast<short>(x);

y是否保证为200,还是由标准由实施决定? 各种编译器对标准的遵守程度如何?

在这种情况下, static_cast<>是“显式类型转换”。 该标准对4.7 / 3“积分转换”中的积分转换有这样的说明:

如果目标类型是带符号的,则该值可以用目标类型(和位字段宽度)表示,则该值不变。 否则,该值是实现定义的。

由于short保证能够保持200的值( short必须至少为16位),因此对于您的特定示例,答案是肯定的。

各种编译器都很好地遵守了这种行为-自从ANSI之前的C语言问世以来就是这种方式,并且太多的代码取决于行为,因此编译器供应商似乎甚至不愿发出有关截断可能性的警告。

如果该值在short范围内,则可以保证该值正确(在您的情况下为true),因此y == 200

如果它不在外面(例如static_cast<short>(1000000000) ),则行为是不确定的。 大多数编译器只会将二进制数字截断为正确的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM