c++编译错误C2971:"std::array":array_size:包含非静态存储不能用作废类型参数;参见“std::array”的声明

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

成功版本:

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表示静态常量

posted @ 2019-04-27 10:21  合滨  阅读(579)  评论(0编辑  收藏  举报