C# 是否存在整数i,其中i<;二,&;i>;10? if(i10){ //这里的代码永远不会被访问或者什么? }
也许是为了防止整数溢出?编辑:我写这篇文章时不知道使用的是c语言。我已经使用C++,但是我相信这个原理对于C语言也是有效的。C# 是否存在整数i,其中i<;二,&;i>;10? if(i10){ //这里的代码永远不会被访问或者什么? },c#,numbers,integer,int,integer-overflow,C#,Numbers,Integer,Int,Integer Overflow,也许是为了防止整数溢出?编辑:我写这篇文章时不知道使用的是c语言。我已经使用C++,但是我相信这个原理对于C语言也是有效的。 没有满足条件的单个整数 编译器可以很好地优化if条件的主体(请参见此处了解详细信息) 然而,在i为易失性的情况下,i的值可能在i10测试之间发生变化。在这种情况下,可以接触到if主体 然而,尽管理论上可能如此,但其意图极不可能如此 下面是我的示例代码 if(i<2 && i>10){ //code here will never b
- 没有满足条件的单个整数
- 编译器可以很好地优化if条件的主体(请参见此处了解详细信息)
- 然而,在
为i
易失性的情况下,
的值可能在i
测试之间发生变化。在这种情况下,可以接触到if主体i10
if(i<2 && i>10){
//code here will never be reached or what?
}
#包括
使用std::cout;
空富(内部一)
{
如果(i<2&&i>10)
{
会议室(10)
{
cout一些c(假设c,因为它被标记了…即使它被标记了,也不假设整数,因为右侧的比较仍然是整数,所以它与标记匹配!;-)代码进入该如果
…取:
#include <iostream>
using std::cout;
void foo(int i)
{
if (i < 2 && i > 10)
{
cout << "The impossible happened in foo\n";
}
}
void bar(volatile int i)
{
if (i < 2 && i > 10)
{
cout << "The impossible happened in bar\n";
}
}
否则,如果多线程(如果比较期间i
的值发生变化)也可能发生这种情况除非您应用正确的锁定否则代码将永远无法到达,因为数字不能小于2且大于10导致此问题的真正问题是什么?为什么您会对逻辑上不可能发生的事情感到奇怪?某些现有代码中是否存在使条件看起来可能为真的错误?也许您应该问一下请阅读。当然,不要忘记如何创建。我试图理解早期开发人员的代码,在不理解代码的情况下更改代码可能会破坏其中的一些逻辑。我发现这只是一个错误,目的是检查我是否在2到10的范围内,因此它是meant to be if(2这是哪种语言?它是c#@PaulFloydYep,在c#进行多线程处理时确实可能发生这种情况,但如果i
是方法的参数,则永远不会发生这种情况(例如,如果i
是它所包含的类的属性,则可能发生这种情况)好的,当重载操作符时,它会使用这个,操纵“:)是的,我刚刚添加了一种方法,它可以在没有额外类或重载的情况下传递…还有多线程的可能性…有多种奇怪的方式可以发生
public class Foo {
public static bool operator> (Foo a, int b) {
return true;
}
public static bool operator< (Foo a, int b) {
return true;
}
}
Foo i = new Foo();
if(i<2 && i>10){
Console.WriteLine("Pass!");
}
private static bool odd;
public static int i { get { odd = !odd; return odd ? 1 : 11; } }