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初始化数组。数据在类主体中初始化,因此除非构造函数初始化它,否则这将是它的默认值。如果您想让数组保持未初始化状态并包含垃圾,那么在声明数据之后删除{},而没有显式初始化它的构造函数将保持这种状态。我是说,只有当构造函数不提供自己的初始化时,才会使用类体初始值设定项。可以将其视为默认值,如果构造函数愿意,可以通过提供自己的值来替换它。