【发布时间】:2022-06-28 23:26:37
【问题描述】:
根据std::byte\'s documentation on cppreference,operator| for std::byte 的实现应该相当于
constexpr std::byte operator|(std::byte l, std::byte r) noexcept
{
return std::byte{ static_cast<unsigned>(l) | static_cast<unsigned>(r) };
}
(运营商&、^、~应该同样实现)
如果std::byte\ 的基础类型是char unsigned,为什么l 和r 需要强制转换为int unsigned?
笔记:我知道char unsigned{} | char unsigned{} 会导致int,因为每个操作数在按位或被申请;被应用;而unsigned{} | unsigned{} 返回一个unsigned 并且没有促销发生。但是,我不明白在这种情况下这样的促销可能会导致哪些问题。
-
注意
char unsigned{} | char unsigned{}的操作数将被提升为unsigned int,以防sizeof(unsigned char) == sizeof(int)。他们并不总是被提升为int -
@phuclv 谢谢,我不知道。这让
static_cast让我更加困惑。 -
unsigned char与int具有相同的大小是相对不寻常的;它通常只出现在像 DSP 这样只处理字大小的操作而不是字节的专用硬件上。但在那种不寻常的情况下,static_cast只是多余的,所以它不会真正影响这个问题。
标签: c++ c++17 bitwise-operators std-byte