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;
  }

}

参考までに、ノードはオブジェクトであり、整数ではありません。 true-false 式を指定して に
整数値を代入する方法がわかりません。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)

これは、私があまり好きではないもう 1 つのショートカットです。

于 2012-08-15T09:47:55.003 に答える
0

false は 0、true は 0 以外のすべて

于 2012-08-15T09:47:12.987 に答える
0

の結果の型はedges[j]->node[0] == nodeですbool。これは暗黙的に に変換されintfalse0 にtrueなり、ゼロ以外の値 (通常は 1) になります。

于 2012-08-15T09:48:04.250 に答える