gpt4 book ai didi

c# - unchecked 只是与编译时错误有关吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:01 25 4
gpt4 key购买 nike

MSDN examples只是编译时错误。

只是我看到@JonSkeet 在这里使用它作为答案:https://stackoverflow.com/a/263416/360211如果只是编译时间,我不明白为什么。

    static void Main()
{
const int x = 4;
int y = int.MaxValue;
int z = x*y;
Console.WriteLine(z);
Console.ReadLine();
}

生成 -4,与此相同:

    static void Main()
{
unchecked
{
const int x = 4;
const int y = int.MaxValue;
int z = x*y; // without unchecked, this is compile error
Console.WriteLine(z);
Console.ReadLine();
}
}

这会抛出运行时:

    static void Main()
{
checked
{
const int x = 4;
int y = int.MaxValue;
int z = x*y; //run time error, can checked be set system wide?
Console.WriteLine(z);
Console.ReadLine();
}
}

Jon 这样做是因为它可以在系统范围、编译器标志或其他方面设置吗?

最佳答案

操作是在checked 还是unchecked block 中是在实际计算值时执行的。当两个变量相乘/相加时,这几乎总是在运行时进行,因为它们在编译时是未知的。

在您的示例中,两个变量都是常量;这意味着编译时文字之间的计算结果可以在编译时完成(它是)。由于结果是在编译时计算的,并且它不在 unchecked block 中,因此它无法在没有错误的情况下计算结果。那意味着检查/未检查 block 通常是编译时检查;他们很少。

是的,可以更改项目属性以确定整个代码库是否处于已检查/未检查的上下文中。如果您正在编写一个库,则也可以从任一上下文中调用该方法。出于这个原因,如果有一段代码必须在已检查或未检查的上下文中运行,最好添加这样的代码块,即使您当前的项目设置对于该方法是正确的。此外,如果不出意外的话,它使该片段的意图对 future 的读者来说更加清晰,“此方法依赖于整数溢出”与“此方法绝不能溢出”。

关于c# - unchecked 只是与编译时错误有关吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13420029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com