C++ c++;初始值设定项列出std::阵列最佳性能

C++ c++;初始值设定项列出std::阵列最佳性能,c++,arrays,performance,initializer-list,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

鉴于这一类别:

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{};
};
模板
类矩阵
{
公众:
矩阵()
{
}
矩阵(std::数组矩阵_数据)
:数据(矩阵_数据){}
无效的
插入(标准::大小行,标准::大小列,值类型值)
{
数据[行][列]=值;
}
值类型
get(std::size\t行,std::size\t列)常量
{
返回数据[行][列];
}
私人:
//初始化为零
std::数组数据{};
};
数据数组初始化为零。但是如果我使用第二个构造函数(非默认构造函数),它会用其他值覆盖它

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


当你有这样一个班级成员时,谢谢你

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

数据
将从
矩阵_data
复制初始化,并且没有零初始化步骤。

当您有一个类成员时,如

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

data
将从
matrix\u data
复制初始化,并且没有零初始化步骤。

为什么您认为第二个构造函数零初始化数组?顺便说一句,通过常量引用返回,以避免复制
value\u type
。我以为第二个构造函数会使用std::array的复制构造函数?我没有假设第二个构造函数zero初始化数组。数据在类主体中初始化,因此除非构造函数初始化它,否则这将是它的默认值。如果您想让数组保持未初始化状态并包含垃圾,那么在声明数据之后删除{},而没有显式初始化它的构造函数将保持这种状态。我是说,只有当构造函数不提供自己的初始化时,才会使用类体初始值设定项。可以将其视为默认值,如果构造函数愿意,可以通过提供自己的值来替换。为什么您认为第二个构造函数zero会初始化数组?顺便说一句,通过常量引用返回,以避免复制
value\u type
。我以为第二个构造函数会使用std::array的复制构造函数?我没有假设第二个构造函数zero初始化数组。数据在类主体中初始化,因此除非构造函数初始化它,否则这将是它的默认值。如果您想让数组保持未初始化状态并包含垃圾,那么在声明数据之后删除{},而没有显式初始化它的构造函数将保持这种状态。我是说,只有当构造函数不提供自己的初始化时,才会使用类体初始值设定项。可以将其视为默认值,如果构造函数愿意,可以通过提供自己的值来替换它。