1) 只有当 UNCHECKED
上下文中的表达式使用显式转换(例如 UNCHECKED
)并且可以隐式转换为特定类型时,byte b1=unchecked((byte)2000);
运算符才有效吗?我是这样假设的,因为以下表达式会引发编译时错误:
byte b1=unchecked(2000); //compile time error
2) a)
CHECKED
和 UNCHECKED
运算符是否仅在表达式或转换的结果值为 integer
类型时才起作用?我假设这是因为在第一个示例中(其中 double
类型被转换为 integer
类型)CHECKED
运算符按预期工作: double m = double.MaxValue;
b=checked((byte)m); // reports an exception
,而在第二个示例中(其中
double
类型被转换为 float
类型)CHECKED
运算符似乎不起作用。因为它不会抛出异常: double m = double.MaxValue;
float f = checked((float)m); // no exception thrown
b) 为什么这两个运算符不能用于结果值的类型为
floating-point type
的表达式?2)下一个引用来自微软的网站:
我不确定我是否理解表达式和转换(例如
unchecked((byte)(100+200));
与 integrals
的共同点)到底是什么?谢谢
最佳答案
不可以。 unchecked operator 中的所有操作都是 unchecked,除非 unchecked operator 然后包含一个 checked operator。
Checked 和 unchecked 运算符仅对整数类型有可观察的影响,是的。
Double 和 float 类型具有无穷大、负无穷大和 NaN 值,可用作溢出操作的结果。任何整数类型中都没有为“错误”情况保留的“未分配”值。 double 和 float 可以通过它们的值来表示错误条件;整数不能。因此,如果您想检测溢出,您需要能够为整数错误打开一些信号机制。
正确的。我注意到这回答了你的前两个问题。
100 是积分型。 200 为积分型。它们的和是整数类型。而 byte 是一个整数类型。该表达式中的所有内容都是整数类型。
别客气。
关于c# - Checked 和 Unchecked 运算符在以下情况下似乎不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3048369/