Почему G ++ не предупреждает о неиспользованном результате члена Const? - PullRequest
0 голосов
/ 18 января 2019

Меня очень раздражает глупая ошибка, которую я совершил. Но меня даже больше раздражает мой компилятор (g ++ 8.1), который меня не предупреждал. ; -)

Пожалуйста, рассмотрите следующий код:

class Test
{
public:

    int getNumber() const
    {
        return 3;
    }
};

int main(void)
{
    Test test;
    test.getNumber();

    return 0;
}

На мой взгляд строка

test.getNumber();

определенно не так. Вызывается константный член Test, но возвращаемое значение не используется. Хотя я компилировал с -Wall -Wextra g ++, отказался выдавать предупреждение. Я проверил документацию -Wunused-result. Если я добавлю атрибут __attribute__ ((warn_unused_result)) к члену, то компилятор действительно предупредит меня.

Но зачем это нужно? Не всегда ли игнорируется возвращаемое значение метода const? И разве у меня не должно быть возможности автоматически установить атрибут warn_unused_result для всех членов const?

Я очень взволнован вашими ответами.

1 Ответ

0 голосов
/ 18 января 2019

Нет, не в полной общности.

  1. В классе может быть mutable участников. Конечно, компилятор может это проверить.

  2. У метода const могут быть и другие побочные эффекты (например, запись в консоль), которые будет трудно определить, если реализация функции находится в другой единице перевода.

...