给定这个类:
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/