a)以下赋值不应导致错误,因为数字100是 int 类型的文字,并且编译器不允许隐式缩小转换?
byte b = 100;
b)如果编译器没有抱怨从 int literal 到 type byte 的隐式缩小转换,那么为什么它也不允许从隐式缩小转换< em> double literal to type float (我意识到我们可以通过使用F / f后缀指定float literal来避免这个错误)?
byte b=16; //OK
float f1=16.9; //error
谢谢
答案 0 :(得分:4)
这将在C#语言规范的第6.1.8节中介绍。如果值在目标类型的范围内,则将int类型的常量表达式转换为sbyte,byte,short,ushort,uint或ulong是合法的。 C#编译器很容易确定该值是否在适当的范围内,从而允许转换。
对于双重案例,C#lang规范没有具体说明为什么不允许这样做。我的猜测是,它确定双值是否适合浮点值有困难。获得浮点精度正确是一项非常困难的任务,可能因此不值得花费(如果可能的话)