gpt4 book ai didi

c++ - 在 C++ 中,当我对 -128,127 范围之外的整数值使用 static_cast 时会发生什么?

转载 作者:IT王子 更新时间:2023-10-29 01:04:31 25 4
gpt4 key购买 nike

在使用 g++ 在 i386 Linux 上编译的代码中,我使用了 static_cast<char>()对于 char,强制转换的值可能超过 -128,127 的有效范围.没有错误或异常,所以我在生产中使用了代码。

现在的问题是,当抛出超出此范围的值时,我不知道这段代码会如何表现。如果数据被修改或截断都没有问题,我只需要知道这种修改在这个特定平台上的表现如何。

另外,如果使用 C 风格转换 ((char)value) 会发生什么?它的行为会有所不同吗?

最佳答案

在您的情况下,这将是一个显式类型转换。或者更准确地说是积分转换。
标准是这样说的(4.7):

If the destination type is signed, the value is unchanged if it can be represented in the destination type (and bit-field width); otherwise, the value is implementation-defined.

所以你的问题是实现定义的。另一方面,我还没有看到一个编译器不只是将较大的值截断为较小的值。而且我从未见过任何使用上述规则的编译器。因此,将 integer/short 转换为 char 应该是相当安全的。

我不知道 C 的规则,我真的尽量避免使用它们,因为很难说出哪条规则会生效。

关于c++ - 在 C++ 中,当我对 -128,127 范围之外的整数值使用 static_cast<char> 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26323585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com