正确的方法来初始化std :: byte的容器

时间:2017-07-18 16:07:32

标签: c++ stl c++17

使用预定的std :: byte值初始化容器的正确方法是什么?

std::array<std::byte, 2> arr{0x36, 0xd0}数组结果

  

Enum std :: byte没有常量来表示X的整数值

和编译器错误。矢量和初始化列表也是禁止的。

带有std :: copy和std的std :: vector真的是处理它的预期方法吗?

1 个答案:

答案 0 :(得分:8)

您必须写std::byte{0x36},因为没有从intenum class的隐式转换。

std::array<std::byte, 2> arr = {std::byte{0x36}, std::byte{0xd0}};

如果您不想每次都写std::byte,请编写辅助函数:

template<typename... Ts>
std::array<std::byte, sizeof...(Ts)> make_bytes(Ts&&... args) noexcept {
    return{std::byte{std::forward<Ts>(args)}...};
}

auto arr = make_bytes(0x36, 0xd0);