低级C ++运算符工作

时间:2014-01-04 10:03:06

标签: c++ operators

这是关于逻辑运算符||,&&的一个非常详细的问题。在C ++上。我在我的代码中使用它们,但我怀疑这段代码:

bool filluppointer(int*sth);
if (filluppointer(&pointer) || filluppointer2(&pointer))
    return;
如果发生了某些事情,

filluppointer会返回true,所以并非总是如此。我的问题是,如果第一个函数返回true,那么if块中的第二个函数会被执行吗? ||等于OR运算符,因此根据规范,两个函数连续执行,然后比较bool。 我只是想创建一个结构,当遇到第一个真正的函数时,整个if结构返回,然后停止然后关键是因为我想要指针中的特定值。之后执行另一个函数将改变值(不在此处,但在我的实际代码中它会改变)。

2 个答案:

答案 0 :(得分:7)

  

我的问题是,如果第一个函数返回true,那么第二个函数   if块中的函数是否被执行?

没有

C ++对&&||使用short-circuit evaluation

答案 1 :(得分:3)

C ++标准保证表达式从左到右进行评估,并且只要表达式可以知道,就不再进行进一步的评估。这对于以下内容尤其方便:

if (ptr != NULL && ptr->x > 12) ... 

if (x != 0 && y / x > 0) ... 

甚至这应该有效:

if (ptr == NULL || ptr->x > 12) 

如果评估将“一直”完成,则上述所有内容都将无效。