在 C++17 中表达 std::byte 文字的正确方法是什么?

vox*_*oid 5 c++ byte c++17

编译器警告不要在按位运算中混合整数和字节。我能找到的创建字节文字的最佳方法是构造函数语法byte(1),如下面示例代码的 for 循环所示。这是最好的方法吗?(除了定义我自己的字面后缀)

#include<vector>

using namespace std;

void drawMonochromeHLine(vector<byte>& screen, int width, int x1, int x2, int y) {
    if (x2 < x1) swap(x1, x2);
    //DCHECK(x1 >= 0);
    //DCHECK((x2 >> 3) < width)
    //DCHECK(y < height)

    int yOffset = y * (width >> 3);
    int si = (x1 >> 3) + yOffset;
    int ei = (x2 >> 3) + yOffset;
    int sbi = (~x1) & 0b111; // x1=6: 00000011. x1=1: 01111111
    int ebi = (~x2) & 0b111; // x=7: 10000000. x2=1: 01111111

    if (si == ei) {
        for (byte mask = byte(1) << ebi; mask >= byte(1) << sbi; mask >>= 1)
            screen[si] |= mask;
    }
    else {
        for (byte mask = byte(1) << sbi; mask > byte(0); mask >>= 1)
            screen[si] |= mask;
        for (int i = si + 1; i < ei; ++i)
            screen[i] = byte(0xff);
        for (byte mask = byte(1) << 7; mask >= byte(1) << ebi; mask >>= 1)
            screen[ei] |= mask;
    }
}
Run Code Online (Sandbox Code Playgroud)

vox*_*oid 0

是的,最接近文字字节表达式的是byte{0}Shawn 提到的,如cppreference std::byte 页面上的(底部)示例所示上的(底部)示例所示。

没有像 float 或 unsigned 这样的字面后缀。