我正在尝试理解一个取自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
。
答案 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
。
它可以隐式转换为int
,false
变为0,true
变为非零值,通常为1。