相关疑难解决方法(0)

是否要求短路逻辑运营商?和评估顺序?

ANSI标准是否要求逻辑运算符在C或C++中被短路?

我很困惑,因为我记得K&R的书说你的代码不应该依赖于这些操作被短路,因为它们可能没有.有人可以指出标准中的哪个位置逻辑操作始终是短路的吗?我最感兴趣的是C++,C的答案也很棒.

我还记得读(不记得在哪里)评估顺序没有严格定义,所以你的代码不应该依赖或假设表达式中的函数将按特定的顺序执行:在语句的末尾所有引用的函数将被调用,但编译器可以自由选择最有效的顺序.

标准是否表明该表达式的评估顺序?

if( functionA() && functionB() && functionC() ) cout<<"Hello world";
Run Code Online (Sandbox Code Playgroud)

c c++ operator-precedence short-circuiting logical-operators

137
推荐指数
5
解决办法
3万
查看次数

被C++逻辑OR(||)运算符搞糊涂了

假设我有两个表达式左/右的||运算符.我发现如果左表达式为真,则永远不会调用右运算符.例如,在我的下面的代码中,当getRand返回true时,我发现Foo永远不会被调用.我在Mac OSX上的XCode上进行了测试,并想知道它是否是我们可以依赖的C++的可靠特性 - 如果留下部分|| 是真的,右边的部分永远不会被调用,或者它只是特定平台的特殊功能(例如带有XCode的OSX)?在下面发布我的代码,谢谢.

bool Foo()
{
    std::cout << "I am called!\n";
    return false;
}

bool getRand()
{
    int random_variable = std::rand();
    std::cout << random_variable << '\n';

    return random_variable % 2 == 1;
}

int main(int argc, const char * argv[]) {

    if (getRand() || Foo())
    {
        std::cout<<"Hello World \n";
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

林先生,提前谢谢

c++

9
推荐指数
2
解决办法
782
查看次数

bool递归函数中的true/false优先级

我已经阅读了之前的帖子并且我已经学到了一些东西,但是想要验证一些循环是如何工作的.在阅读中,我是否正确理解"真实"的优先级高于"虚假"?例如:

/.../
return (true || false);
Run Code Online (Sandbox Code Playgroud)

将返回"true"(无论顺序)?

如果我有一个布尔递归函数调用它自己的3个变量...我需要的是一个版本返回true以使整个函数返回true,对吗?下面的函数创建它的堆栈帧,然后返回调用创建3个堆栈帧并运行调用,然后如果一个返回true,整个funct返回true,因为true优先于false ...这个假设是否正确?

即:

/* This function is taking a given weight and seeing if it can be offset by available 
 * weights. Depending on what weights are available, the weights can be directly opposed
 * to "weight" (opposite side of scale) or added to... The recursive calls will either all 
 * return false, all return true, or a variation thereof.  All that I can is that if one 
 * branch returns true, the …
Run Code Online (Sandbox Code Playgroud)

c++ recursion boolean

1
推荐指数
1
解决办法
905
查看次数

目标C条件陈述评估

可能重复:
是否在C/C++中强制要求短路布尔运算符?和评估顺序?

在研究iOS问题时,我发现了以下答案:如何判断UIViewController的视图是否可见

答案的细节并不重要,但重要的是它基本上说如果你有一个看似如下的条件语句......

if(X && Y)
{
    //do stuff here
}
Run Code Online (Sandbox Code Playgroud)

如果X为假,则永远不会评估Y. 这是真的?是否可以肯定编译器不会优化它if(Y && X)

conditional objective-c ios

1
推荐指数
1
解决办法
517
查看次数

C++ if语句中的优先级

可能重复:
短路评估是否保证在C++中与Java一样?
C++如何处理&&?(短路评估)

我有以下结构定义和特定用例:

struct foo
{
   bool boo;
};

int main()
{
  foo* f = 0;
   .
   .
   .
  if ((f) && (f->boo)) // <--- point of contention
   return 0
  else
   return 1;
}
Run Code Online (Sandbox Code Playgroud)

标准是否保证上面if语句中的第一组括号始终在第二个之前进行评估?

如果没有什么是最好的重写上面的代码?

目前我有以下一塌糊涂:

if (f)
{
   if (f->boo)
      return 0;
   else
      return 1;
}
else
   return 1;
Run Code Online (Sandbox Code Playgroud)

c++ standards operator-precedence

0
推荐指数
2
解决办法
122
查看次数

如何编译if语句编译

main()    
{

   int k = 5;

    if(++k <5 && k++/5 || ++k<=8);  // how to compiler compile this statement 
  print f("%d",k);
}
Run Code Online (Sandbox Code Playgroud)

//这里的答案是7但是为什么?

c c++ compiler-construction

-5
推荐指数
1
解决办法
205
查看次数