C++ 初始值设定项列表 std::array 最佳性能

标签 c++ arrays performance initializer-list

给定这个类:

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 复制初始化,并且没有零初始化步骤。

关于C++ 初始值设定项列表 std::array 最佳性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46097719/

相关文章:

java - 为什么将整数转换为字符串时,字符串连接比 String.valueOf 更快?

c++ - 在 C++ 中用 new/delete 替换 malloc/free

c++覆盖文件数据?

python - 如何在numpy数组中逐轴查找最小值/最大值

php - 使用 PHP 检查 mysql 数据库更改

php - ZF2模块加载性能

c++ - 构建 Z3 不稳定分支时出错

c++ - 数组格式问题和将数组传递给函数

php - 数组上的奇怪打印

c# - 具有不同 DTO 的 View 模型之间的 MVVM 通信