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
まだ機能している割り当ての初期化の背後にある理論的根拠です。