C++ 将较小的整数类型分配给较大的整数类型是否不安全?

C++ 将较小的整数类型分配给较大的整数类型是否不安全?,c++,C++,除了较小的类型是有符号的且小于0且较大的类型是无符号的情况外,是否还有其他情况将较小的int类型分配给较大的int类型是不安全的?我认为没有。因为较大的类型可以容纳较小类型的所有位信息。唯一的问题可能是有符号/无符号的东西(有符号和无符号混合时总是这样)。但是你可以随时恢复原始值。没有信息丢失 signed short s = -1; unsigned int i = s; signed short originalValue = (signed short)i; cout <<

除了较小的类型是有符号的且小于0且较大的类型是无符号的情况外,是否还有其他情况将较小的int类型分配给较大的int类型是不安全的?

我认为没有。因为较大的类型可以容纳较小类型的所有位信息。唯一的问题可能是有符号/无符号的东西(有符号和无符号混合时总是这样)。但是你可以随时恢复原始值。没有信息丢失

signed short s = -1;
unsigned int i = s;
signed short originalValue = (signed short)i;

cout << s << endl;
cout << i << endl;
cout << originalValue  << endl;

在线演示:

据我所知,将较小的整数类型分配给较大的整数类型没有问题


问题恰恰相反。

从技术上讲,如果值超出范围,则返回到有符号实现的转换是由定义的。@Oli:真的吗?你能给我推荐信吗?@Oli:小号的超出范围了?如果是这样的话,那么它就不适用于我所询问的案例,对吗?@Nawaz:我可以给你一个C99参考:6.3.1.3,第3段。我确信C++标准中也存在类似的东西;我会查的。@Nawaz:技术上还没有定义。在实践中,这些方法在大多数平台上都能很好地工作。您是否在寻找特定的方法?
-1
4294967295
-1