【发布时间】:2021-01-26 22:12:28
【问题描述】:
我知道我可以使用reinterpret_cast,但我不能从 char 转到像 std::byte 这样的“通用”类型似乎很奇怪。
这只是不幸的错误/限制,还是有原因?
int main(){
std::string s{"abc"};
std::byte* ptr = static_cast<std::byte*>(s.data());
}
【问题讨论】:
-
出于同样的原因,您不能使用
static_cast在char *和unsigned char *之间进行转换 -std::byte是一个明显不相关的类型。 -
@SilvioMayolo
sizeof(char)按定义为 1 个字节,因为byte由c++定义为char的大小。std::byte也是一个与unsigned char大小相同的枚举,因此实际上您可以通过标准保证sizeof(char) == sizeof(std::byte)。 -
@Mestkon 很高兴知道。在这里,我假设
std::byte被定义为 8 位。谢谢你告诉我! -
与其说是错误或限制,不如说是类型的全部要点和目的。
byte的全部目的是作为记忆而不是字符或算术类型。