关于static_cast如何处理减小整数大小的C++语言标准是什么意思?

ReW*_*ite 6 c++ casting

我想知道C++语言标准规定的规则,例如:

long x = 200;
short y = static_cast<short>(x);
Run Code Online (Sandbox Code Playgroud)

y保证是200,还是标准的离开这个由实现来决定?各种编译器如何符合标准?

Mic*_*urr 9

在这种情况下,这static_cast<>是一种'显式类型转换.该标准对4.7/3"积分转换"中的积分转换有所说明:

如果目标类型已签名,则如果可以在目标类型(和位字段宽度)中表示该值,则该值不会更改; 否则,该值是实现定义的.

由于short保证能够保存该值200(short必须至少为16位),因此对于您的具体示例,答案是肯定的.

各种编译器都很好地遵循这种行为 - 自从ANSI之前的C版以来就是这样,所以代码依赖于编译器供应商似乎不愿意发出有关截断可能性的警告的行为.