如何用整型字面量初始化std::byte类型的std::array常量
实现方案
你可以通过编译期转换函数或者自定义字面量两种方式实现简洁初始化,两种方案都没有运行时额外开销,和手动写初始化列表的性能完全一致。
方案1:使用constexpr转换函数
先定义一个编译期执行的转换函数,处理整型到CatType的转换:
#include <array> #include <cstddef> #include <cstdint> typedef std::array<std::byte, 4> CatType; // 默认大端序:数组第0位存整型最高位 constexpr CatType make_cat(std::uint32_t val) noexcept { return { std::byte{(val >> 24) & 0xFF}, std::byte{(val >> 16) & 0xFF}, std::byte{(val >> 8) & 0xFF}, std::byte{val & 0xFF} }; }
使用方式:
const CatType mycat = make_cat(0x001020ff);
如果需要小端序(数组第0位存整型最低位),调整移位顺序即可:
constexpr CatType make_cat_le(std::uint32_t val) noexcept { return { std::byte{val & 0xFF}, std::byte{(val >> 8) & 0xFF}, std::byte{(val >> 16) & 0xFF}, std::byte{(val >> 24) & 0xFF} }; }
方案2:自定义字面量(写法最简洁)
在转换函数的基础上自定义字面量,完全实现你期望的直接用整型赋值的写法:
constexpr CatType operator""_cat(unsigned long long val) noexcept { // 内部调用上面的make_cat或者make_cat_le均可 return make_cat(static_cast<std::uint32_t>(val)); }
使用方式:
const CatType mycat = 0x001020ff_cat;
内容的提问来源于stack exchange,提问作者Reimundo Heluani
相关产品推荐
相关产品推荐

