C++11 为我们提供了初始化列表。我了解到这些不会执行缩小转换,这有时会破坏现有代码的编译,例如在对具有隐式 int 扩展值的枚举值进行操作时:
enum COMMAND
{
COMMAND_WRITE_MISC_CONFIG = 0x70
};
struct CommandSettings
{
quint8 buddy;
};
void NarrowingTest::testNarrowing()
{
quint8 i = 100;
CommandSettings test{static_cast<quint8>(COMMAND_WRITE_MISC_CONFIG | i)};
quint8 x = COMMAND_WRITE_MISC_CONFIG | i;
QVERIFY(true);
}
的初始化test
不会在没有演员表的情况下编译。
我正在寻找的是x
仍在工作的分配初始化背后的基本原理。