【问题标题】:Convert type<T> to bool, what's wrong?将 type<T> 转换为 bool,有什么问题?
【发布时间】:2020-06-14 12:28:31
【问题描述】:

以下代码无法按预期工作:

template<class T>
bool any(const Matrix<T> &matrix) {
    int matrix_height = matrix.height();
    int matrix_width = matrix.width();
    for (int i = 0; i < matrix_height; i++) {
        for (int j = 0; j < matrix_width; j++) {
            if (matrix(i, j) == true) {
                return true;
            }
        }
    }
    return false;
}

对于像 {-1,0,0,0} 这样的矩阵,有一个成员 -1 为真,因此它应该返回真,但它返回假。我是否以错误的方式将 T 值转换为布尔值?

【问题讨论】:

  • 为什么不直接做if (matrix(i, j) != T{})
  • 什么是 T{}?你能解释一下吗
  • 为什么不直接做if (matrix(i, j))
  • @smith 它默认构造一个 T 类型的对象。
  • 因为truetrue == true,而falsefalse == true

标签: c++ class generics type-conversion


【解决方案1】:

要检查条件是否为真(y),请使用if(condition)。这会将表达式计算为布尔值。所以if(7) 评估为if((bool)7),这确实是真的。另一方面,

if(7 == true)

评估数值相等,将true 向上转换为整数,并将其与7 进行比较。在大多数实现中,我都熟悉(全部?)true == 1,因此计算结果为7 == 1。这里(通常)唯一会产生 true 的数字是 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多