在我的代码库中,我经常使用以下语法初始化数组或向量 if 字节:
uint16_t foo = 0xAB, bar = 0xCD
// bytes = { 0xA, 0xB, 0xC, 0xD }
std::array<uint8_t, 4> bytes = {{
foo >> 8,
foo & 0x00FF,
bar >> 8,
bar & 0x00FF
}};
我从 clang++ 收到以下错误:
error: non-constant-expression cannot
be narrowed from type 'int' to 'value_type' (aka 'unsigned char') in initializer list [-Wc++11-narrowing]
foo >> 8,
^~~~~~~~~~~~~
编译器建议我添加一个 static_cast 来消除错误。我知道演员表会起作用,但我想知道是否有可能避免演员表并保持语法像现在一样优雅?
谢谢您的帮助。