今日、マトリックスクラスをconstexpr
に書き直しました。私はこのクラスで100%単体テストのカバレッジを持っていましたが、ほぼすべての関数をconstexprに変換した後、コンストラクタの一部がlcovにマークされました。constexprコンストラクタはカバレッジデータを表示しません
ここにはコンストラクタだけのクラスがあります。
template<typename T, std::size_t m, std::size_t n>
class Matrix
{
static_assert(std::is_arithmetic<T>::value,
"Matrix can only be declared with a type where "
"std::is_arithmetic is true.");
public:
constexpr Matrix(
std::initializer_list<std::initializer_list<T>> matrix_data)
{
if (matrix_data.size() != m)
{
throw std::invalid_argument("Invalid amount of rows.");
}
for (const auto& col : matrix_data)
{
if (col.size() != n)
{
throw std::invalid_argument("Invalid amount of columns.");
}
}
std::size_t pos_i = 0;
std::size_t pos_j = 0;
for (auto i = matrix_data.begin(); i != matrix_data.end(); ++i)
{
for (auto j = i->begin(); j != i->end(); ++j)
{
this->data[pos_i][pos_j] = *j;
++pos_j;
}
++pos_i;
pos_j = 0;
}
}
private:
std::array<std::array<T, n>, m> data{};
};
int main()
{
Matrix<double, 2, 2> mat = {
{1, 2},
{3, 4}
};
return 0;
}
私は私がこのクラスに100%のユニットテストカバレッジを(持っていた)しているが、私はconstexpr
コンストラクタの一部に、ほぼすべての機能を変換した後、私は気づいたlcov 1.13
ここでは何が求められましたか? –
@ÖöTiib 'constexpr'コードが' gcov'を有効にしてカバレッジデータを生成しないのはなぜですか? – user0042