所定のstd :: byte値でコンテナを初期化する正しい方法はありますか?std :: byteのコンテナを初期化する正しい方法
列挙のstd ::バイトの配列結果の
std::array<std::byte, 2> arr{0x36, 0xd0}
はX
とコンパイラエラーの整数値を表すために一定していません。ベクトルとイニシャライザのリストも無駄です。
std :: vectorはstd :: copyであり、実際にこれを処理する意図がありますか?
所定のstd :: byte値でコンテナを初期化する正しい方法はありますか?std :: byteのコンテナを初期化する正しい方法
列挙のstd ::バイトの配列結果の
std::array<std::byte, 2> arr{0x36, 0xd0}
はX
とコンパイラエラーの整数値を表すために一定していません。ベクトルとイニシャライザのリストも無駄です。
std :: vectorはstd :: copyであり、実際にこれを処理する意図がありますか?
std::byte{0x36}
は、int
からenum class
への暗黙的な変換がないため、書く必要があります。あなたは一つ一つの時間をstd::byte
書きたくない場合は
std::array<std::byte, 2> arr = {std::byte{0x36}, std::byte{0xd0}};
、ヘルパー関数の書き込み:使用して数値nはバイト値に変換することができ
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);
をのstd ::バイト{N} 、C++ 17のリラックスしたenumクラスの初期化ルールのためです。 http://en.cppreference.com/w/cpp/types/byte –
OK、私はこれを知っており、この例では完全に問題ありません。しかし、20の価値観は、面倒です。本当に良い方法はありませんか? – Dassem
興味深いことに、なぜ、unsigned charというよりstd :: byteを使いたいのですか? –