用預定的std :: byte值初始化容器的正確方法是什麼?正確初始化std :: byte的容器的方法:
std::array<std::byte, 2> arr{0x36, 0xd0}
數組導致
枚舉的std ::字節具有不恆定代表X
和編譯器錯誤的整數值。向量和初始化器列表也是不可行的。
std :: vector與std :: copy並且真的轉換了處理這個的預期方式?
用預定的std :: byte值初始化容器的正確方法是什麼?正確初始化std :: byte的容器的方法:
std::array<std::byte, 2> arr{0x36, 0xd0}
數組導致
枚舉的std ::字節具有不恆定代表X
和編譯器錯誤的整數值。向量和初始化器列表也是不可行的。
std :: vector與std :: copy並且真的轉換了處理這個的預期方式?
您必須編寫std::byte{0x36}
,因爲沒有從int
到enum 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);
的數值n可以被轉換爲字節值的std ::字節{N} ,這是由於C++ 17放寬了枚舉類的初始化規則。 http://en.cppreference.com/w/cpp/types/byte –
好吧,我知道這一點,這個例子完全正確。但是,比方說,20個值......這很麻煩。真的沒有更好的辦法嗎? – Dassem
作爲一個感興趣的問題,你爲什麼要使用std :: byte而不是說unsigned char? –