在C ++上给定布尔表达式的整数值

时间:2012-08-15 09:44:59

标签: c++ algorithm

我正在尝试理解一个取自c ++代码的算法,这里是C ++代码

inline void DBGame::make_chain( Edge* &newedge, Edge *edges[], Node *node ){ newedge->length = edges[0]->length + edges[1]->length;

for (int j = 0; j < 2; j++)       {

edges[j]->parent = newedge; edges[j]->remove();

  // replace the old edge with the new edge at the other end
  // -------------------------------------------------------
  int k = (edges[j]->node[0] == node);
  newedge->node[j] = edges[j]->node[k];
  newedge->pself[j] = edges[j]->pself[k];
  *newedge->pself[j] = newedge;
  }

}

fyi,node是一个对象而不是整数 我不明白如何通过给出一个真假表达式将整数值赋给int k

3 个答案:

答案 0 :(得分:2)

有一个隐含的bool转换为0或1.它没有大大增加可读性或效率,并且至少部分是因为C没有bool类型。

这一行:

int k = (edges[j]->node[0] == node);

相当于:

int k = edges[j]->node[0] == node ? 1 : 0;

并且juut要添加到此,因为原始提问者似乎已经决定使用注释来扩展问题,还有来自数字类型的隐式转换和指向bool的指针。

所以

if (node) 

相当于

if (node != 0)

这是另一种我并不完全迷恋的捷径。

答案 1 :(得分:0)

false为0,true为0以外的所有内容

答案 2 :(得分:0)

edges[j]->node[0] == node的结果类型为bool。 它可以隐式转换为intfalse变为0,true变为非零值,通常为1。