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