c++ 初始化程序列表 std::array 最佳性能

c++ initializers list std::array best performance

鉴于此 class:

template<class value_type, std::size_t row_count, std::size_t column_count>
class matrix 
{
public:
    matrix()
    {
    }

    matrix(std::array<std::array<value_type, row_count> ,column_count> matrix_data)
        : data(matrix_data) {}

    void 
    insert(std::size_t row, std::size_t column, value_type value)
    {
        data[row][column] = value;
    }

    value_type 
    get(std::size_t row, std::size_t column) const
    {
        return data[row][column];
    }

private:
    // Initialised to zero
    std::array<std::array<value_type, row_count>, column_count> data{};
};

数据数组被初始化为零。但是如果我使用第二个构造函数(非默认构造函数),它会用其他值覆盖它。

有没有办法提高性能,以便在使用第一个构造函数时,值仅初始化为零? 我猜 for 循环的效率不如 data{} 语句? 我说得对吗?

谢谢

当您有 class 会员喜欢

std::array<std::array<value_type, row_count>, column_count> data{};

你的意思是在所有不初始化 data 的构造函数中使用 data{} 作为初始化器。如果您有一个为 data 提供成员初始值设定项的构造函数,那么编译器将使用该初始值设定项而不是您提供的默认值。这意味着在

matrix(std::array<std::array<value_type, row_count> ,column_count> matrix_data)
    : data(matrix_data) {}

data 将从 matrix_data 复制初始化,没有零初始化步骤。