GCC 8.2 上的 Eigen 3 SpaseMatrix<bool> - SparseMatrix<bool> 乘法警告

Eigen 3 SpaseMatrix<bool> - SparseMatrix<bool> multiplication warning on GCC 8.2

我想使用 Eigen 3.3 乘以布尔稀疏矩阵。

以下代码可在 GCC 8.2 和 Clang 6 上编译:

#include <Eigen/Sparse>
#include <iostream>

int main()
{
    Eigen::SparseMatrix<bool> A { 3, 3 };
    Eigen::SparseMatrix<bool> B { 3, 1 };

    A(0, 1) = true;
    A(1, 0) = true;
    A(2, 2) = true;
    B(0, 0) = true;
    B(0, 2) = true;

    std::cout << A * B << std::endl;
    return 0;
}

它打印出我期望的结果,[1 0 1],并且在 Clang 6 上编译时没有任何警告。但是,在 GCC 8.2 上,我收到了以下烦人的警告:

/usr/include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h:65:25: warning: ‘*’ in boolean context, suggest ‘&&’ instead [-Wint-in-bool-context]
       values[i] = x * y;

有没有一种方法可以仅在与稀疏矩阵相乘时将布尔乘法覆盖为逻辑或 &&?或者还有其他解决方法吗?我无法切换到密集 matrices/arrays,因为我在实际代码中使用非常大的矩阵。即使有这个警告,这个操作的性能真的很好。

我已经试过了:

我想你使用 -Wall 作为 GCC 编译器标志。

您可以通过 -Wall -Wno-int-in-bool-context

关闭该特定警告