1) 只有当 UNCHECKED 上下文中的表达式使用显式转换(例如 UNCHECKED )并且可以隐式转换为特定类型时,byte b1=unchecked((byte)2000); 运算符才有效吗?我是这样假设的,因为以下表达式会引发编译时错误:

byte b1=unchecked(2000); //compile time error

2) a) CHECKEDUNCHECKED 运算符是否仅在表达式或转换的结果值为 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/

10-10 21:43