You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用整型字面量初始化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 13:45:04