Megosztás a következőn keresztül:


lnt-comparison-bitwise-precedence

Az összehasonlító operátor nagyobb elsőbbséget élvez, mint a bitenkénti operátor.

Először az összehasonlító operátor lesz kiértékelve. Az eredmény implicit módon egy egész számra lesz vetve, és operandusként lesz felhasználva a bitenkénti műveletben. Zárójelek szükségesek a várt műveleti sorrend kényszerítéséhez.

Az lnt-comparison-bitwise-precedence ellenőrzést a C/C++ kódstílus beállításaiban található Összehasonlítás/Bitenkénti sorrend beállítás vezérli. A beállítás módosításáról további információt a linter konfigurálása című témakörben talál.

Példák

bool is_flag_set(unsigned value, unsigned flag)
{
    return value & flag == flag;  // Flagged: `flag == flag` is evaluated first.
                                  // Then `value & (int)true` is evaluated which
                                  // returns an incorrect result in most cases.
}

Zárójelek használatával kényszerítse ki a műveletek helyes sorrendjét:

bool is_flag_set(unsigned value, unsigned flag)
{
    return (value & flag) == flag;  // Correct
}

A probléma megoldása

A linter által javasolt javítás az, hogy zárójeleket ad hozzá a bitenkénti művelethez, hogy a rendszer először kiértékelje.

Lásd még

IntelliSense kódellenőrző C++-hoz – áttekintés