隐式转换会丢失信息吗?

Will implicit conversions lose information?

根据https://www.learncpp.com/cpp-tutorial/44-implicit-type-conversion-coercion/

"The important thing to remember about promotions is that they are always safe, and no data loss will result."

然而 https://www.geeksforgeeks.org/type-conversion-in-c/ 指出:

"It is possible for implicit conversions to lose information, signs can be lost (when signed is implicitly converted to unsigned), and overflow can occur (when long long is implicitly converted to float)."

我知道隐式转换是安全的,但我不明白如何不会导致数据丢失。哪个准确?

第一篇文章讲的是提升,这是一种特定类型的隐式转换。还有其他类型的转换也是隐式转换但不是促销。提升是一种特定类型的隐式转换,它不会丢失信息,因为您总是要使用更广泛的类型,即一种类型,其中被提升的类型可表示的所有值都可由提升为类型表示(int -> long long 例如)

其他隐式转换包括:从有符号到无符号、收缩转换、浮点数到整数的转换。与促销不同,这些转换可能会丢失信息。