使用C ++ 17添加了std::byte
。但是,所有这些遗留接口都期望const char*
为一个字节数组(例如,libpng)。如果我在代码中将字节表示为std::byte
个对象的容器(例如,std::vector<std::byte>
),我该如何使用这些接口?
答案 0 :(得分:2)
给定std::byte
s的连续缓冲区,将std::byte*
重新解释为char*
是合法的,并且不违反严格的别名规则:
(wording from the most recent revision of the std::byte
proposal)
左值和右值[basic.lval]
- 醇>
如果程序试图通过以下类型之一以外的glvalue访问对象的存储值,则行为未定义:
[...]
(8.8)
char
,unsigned char
或std::byte
类型。
(注意:&#34;或std::byte
&#34;由提案添加)
因此,您可以使用reinterpret_cast<const char*>(pointer_to_std_byte_buffer)
或static_cast<const char*>(static_cast<const void*>(pointer_to_std_byte_buffer))
或(const char*)pointer_to_std_byte_buffer
,具体取决于您的风格指南所说的内容。
答案 1 :(得分:0)
如果你坚持使用std :: byte,你必须在传递给期望元素为char的东西时进行强制转换:
(char const *)&myVec[0]