Как заставить предупреждение «оператор не имеет эффекта» перегружено == - PullRequest
0 голосов
/ 01 мая 2018

В следующем примере:

class Test

{
public:
    Test(int _value) { value = _value; };
    const bool operator==(int _value) const { return value == _value; };
private:
    int value;
};

int main(void)
{
    int a;
    a == 1;

    Test b(1);
    b == 1;

    return 0;
}

компиляция дает следующее:

$ g++ -Wall -pedantic -o test test.cc
a.cc: In function ‘int main()’:
a.cc:13:7: warning: statement has no effect [-Wunused-value]
     a == 1;
     ^

Это хорошо, так как он предупредил, что я сделал ошибку и опечатка == для =

Но то же самое верно для моего Тестового класса. Как я могу разметить класс или определение оператора ==, чтобы компилятор предупредил меня другим «оператор не имеет никакого эффекта» для строки «b == 1»?

1 Ответ

0 голосов
/ 01 мая 2018

В C ++ 17 вы можете пометить перегрузку оператора как [[nodiscard]]:

[[nodiscard]] bool operator==(int _value) const { return value == _value; }

Это побудит компилятор выдавать предупреждение, если возвращаемое значение не используется.

живой пример на wandbox.org


Из cppreference:

[[nodiscard]]

Появляется в объявлении функции, объявлении перечисления или объявлении класса. Если функция, объявленная как nodiscard, или функция, возвращающая перечисление или класс, объявленный как nodiscard по значению, вызывается из выражения отброшенного значения, отличного от преобразования в void, компилятору рекомендуется выдать предупреждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...