C++ 11給了我們初始化列表。我已經學會了用含蓄詮釋-擴大值在枚舉值運行時,這些不執行收縮轉換,有時會破壞現有的代碼編譯,例如:C++ 11在分配和初始化列表之間的差異
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
仍在工作的作業初始化背後的基本原理。
你確定以上是有效的c + + 03嗎?我很確定演員也需要在那裏。 – StoryTeller
@StoryTeller帶轉換的版本是C++ 03中的語法錯誤。如果它是'CommandSettings test = {COMMAND_RITE_MISC_CONFIG |我};'但是,這是有效的C++ 03,但是在C++ 11中發生了錯誤,並且可以通過添加一個強制類型使其成爲有效的C++ 11。 – hvd
@StoryTeller不,它是編譯測試應用程序的一部分。只是複製了相關部分(這是一個Qt5.7測試用例,默認情況下啓用C++ 11) – deets