在Qt5中这段代码编写有两种方式:一个编译成功,一个失败

成功版本:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

static constexpr size_t block_size = 0x2000;//8KB

static constexpr size_t array_size = block_size/sizeof(uint32_t);

alignas(32) std::array<uint32_t,array_size> wr_data;

alignas(32) std::array<uint32_t,array_size> rd_data = {{0}};

std::iota(std::begin(wr_data),std::end(wr_data),0);

 

失败版本:

size_t block_size = 0x2000;//8KB

size_t array_size = block_size/sizeof(uint32_t);

alignas(32) std::array<uint32_t,array_size> wr_data;

alignas(32) std::array<uint32_t,array_size> rd_data = {{0}};

std::iota(std::begin(wr_data),std::end(wr_data),0);

===============================================================

因为array对象的长度固定,使用栈,根据array对象的创建语法:

array<typename,n_elem> arr;n_elem是常量,所以失败版本size_t array_size = block_size/sizeof(uint32_t);语句中array_size是变量,便不能

通过编译器语法编译规则,加上static constexpr表示静态常量

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄