a) 由于数字 100 是 int 类型的文字,并且编译器不允许隐式缩小转换,因此以下赋值难道不会导致错误吗?
byte b = 100;
b) 如果编译器不提示从 int 文字 到 字节类型 的隐式缩小转换,那么为什么它不允许从 进行隐式缩小转换em>双文字到类型float(我意识到我们可以通过使用F/f后缀指定浮点文字来避免这个错误)?
byte b=16; //OK
float f1=16.9; //error
谢谢
最佳答案
C# 语言规范第 6.1.8 节对此进行了介绍。如果值在目标类型的范围内,则将 int 类型的常量表达式转换为 sbyte、byte、short、ushort、uint 或 ulong 是合法的。 C# 编译器很容易确定该值是否在适当的范围内,从而允许转换。
对于 double 情况,C# 语言规范没有具体指出为什么不允许这样做。我的猜测是,这与确定 double 值是否适合浮点值的困难有关。获得正确的浮点精度是一项非常困难的任务,而且可能非常困难,因此人们认为不值得付出这样的代价(如果可能的话)
关于c# - 文字和隐式缩小转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2217894/