我已经看到这个代码用于查找矩阵的次要内容:
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))。
这是什么意思?
答案 0 :(得分:2)
(row >= numRow)
是一个布尔表达式。如果operator>=
尚未超载,则true
如果row
大于或等于numRow
则评估为false
,否则评估为{{1}}。将此布尔值转换为减法的整数时,如果为true,则为0,否则为0。
答案 1 :(得分:1)
(row >= numRow)
是一个布尔表达式,在使用时会转换为int
,true
变为1
,false
变为{{1} }}
答案 2 :(得分:1)
表达它的一种更清晰的方式可能是:
r < (row >= numRow ? numRow - 1 : numRow)
答案 3 :(得分:0)
row >= numRow
将返回布尔值true或false,并且隐式转换为整数0
或1
。那么它的作用基本上与:
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
,当用作整数时,1
或0
。
r < (numRow - (row >= numRow))
与
相同 如果r < (numRow - 1)
,请 (row >= numRow)
其他是r < numRow
答案 6 :(得分:0)
正如其他人之前所说的那样,只有一个bool
表达式在减去之前被投射到int
(这意味着:如果row >= numRow
则减去1)。
但我想补充说这很荒谬。您已经断言row < numRow
,因此row >= numRow
会违反您的函数的前提条件。对于以下行中的col > numCol
也是如此。