如何在模板类中初始化std::array并将其置零?
解决方法
有几种简洁的方式能让MyClass内部的std::array<gsl::byte, aLen>在默认构造时被初始化为全零:
方式一:构造函数成员初始化列表值初始化
直接在构造函数的成员初始化列表中对数组进行值初始化,会自动将所有元素置为零:
template <size_t aLen> class MyClass { public: MyClass() : mArray{} {} private: std::array<gsl::byte, aLen> mArray; };
方式二:类内成员直接初始化
无需显式编写构造函数,在成员声明阶段就用值初始化语法,默认构造函数会自动完成数组的零初始化:
template <size_t aLen> class MyClass { private: std::array<gsl::byte, aLen> mArray{}; };
方式三:构造函数内手动填充(显式操作)
如果需要更直观的显式操作,可以借助std::fill完成填充,不过前两种方式更高效简洁:
#include <algorithm> template <size_t aLen> class MyClass { public: MyClass() { std::fill(mArray.begin(), mArray.end(), gsl::byte{0}); } private: std::array<gsl::byte, aLen> mArray; };
以上三种方式都能达成需求:创建MyClass<8>或MyClass<16>对象时,内部数组会被初始化为全零。
内容的提问来源于stack exchange,提问作者user13295228
相关产品推荐
相关产品推荐

