0

我试图理解从 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;
  }

}

仅供参考,节点是一个对象,而不是一个整数。
我不明白如何int k 通过给出一个真假表达式来分配一个整数值。

4

3 回答 3

2

有一个 bool 到 0 或 1 的隐式转换。它不会大大增加可读性或效率,并且至少部分是 C 没有 bool 类型的结果。

这一行:

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

相当于:

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

除此之外,由于最初的提问者似乎已经决定使用评论来扩展问题,因此还有来自数字类型的隐式转换和指向 bool 的指针。

所以

if (node) 

相当于

if (node != 0)

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

于 2012-08-15T09:47:55.003 回答
0

false 为 0,true 为除 0 之外的所有内容

于 2012-08-15T09:47:12.987 回答
0

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

于 2012-08-15T09:48:04.250 回答