c ++中一个奇怪的表达 - 这是什么意思?

时间:2010-10-07 08:41:08

标签: c++ expression

我已经看到这个代码用于查找矩阵的次要内容:

RegMatrix RegMatrix::Minor(const int row, const int col)const{
  //printf("minor(row=%i, col=%i), rows=%i, cols=%i\n", row, col, rows, cols);
 assert((row >= 0) && (row < numRow) && (col >= 0) && (col < numCol));

 RegMatrix result(numRow-1,numCol-1);

 // copy the content of the matrix to the minor, except the selected
    for (int r = 0; r < (numRow - (row >= numRow)); r++){
  for (int c = 0; c < (numCol - (col > numCol)); c++){
   //printf("r=%i, c=%i, value=%f, rr=%i, cc=%i \n", r, c, p[r-1][c-1], r - (r > row), c - (c > col));
   result.setElement(r - (r > row), c - (c > col),_matrix[r-1][c-1]);
  }
 }
     return result;
}

这是我第一次遇到像这样的代码行:r&lt; (numRow - (row&gt; = numRow))。

这是什么意思?

7 个答案:

答案 0 :(得分:2)

(row >= numRow)是一个布尔表达式。如果operator>=尚未超载,则true如果row大于或等于numRow则评估为false,否则评估为{{1}}。将此布尔值转换为减法的整数时,如果为true,则为0,否则为0。

答案 1 :(得分:1)

(row >= numRow)是一个布尔表达式,在使用时会转换为inttrue变为1false变为{{1} }}

答案 2 :(得分:1)

表达它的一种更清晰的方式可能是:

r < (row >= numRow ? numRow - 1 : numRow)

答案 3 :(得分:0)

row >= numRow将返回布尔值true或false,并且隐式转换为整数01。那么它的作用基本上与:

相同
r < (numRow - (row >= numRow ? 1 : 0))

答案 4 :(得分:0)

如果row >= numRow大于或等于numRow,

row将返回1,否则返回0.

因此,代码行等同于这样的函数:

bool foo() { 
    if(row >= numRow)
       return r < numRow - 1;
    else
       return r < numRow;
}

答案 5 :(得分:0)

使用比较运算符的结果是true false,当用作整数时,10

r < (numRow - (row >= numRow))

相同 如果r < (numRow - 1)

,请

(row >= numRow)

其他是r < numRow

答案 6 :(得分:0)

正如其他人之前所说的那样,只有一个bool表达式在减去之前被投射到int(这意味着:如果row >= numRow则减去1)。

但我想补充说这很荒谬。您已经断言row < numRow,因此row >= numRow会违反您的函数的前提条件。对于以下行中的col > numCol也是如此。