Почему эта переменная помечена как «неиспользованная»? - PullRequest
0 голосов
/ 09 мая 2018

Мой компилятор C ++ выдает предупреждение о том, что следующая переменная intVar "не используется".

void MyClass::MyMethod(bool bFlag)
{
    int intVar = 10;
    if (bFlag)
        intVar = 20;
}

Почему компилятор делает это, когда переменная, очевидно, используется? Должно ли это быть исправлено компилятором, чтобы оно распознавалось как «использованное»?

Ответы [ 3 ]

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

«Используется» в данном контексте означает чтение переменной. Если вы постоянно пишете в переменную и никогда не читаете ее, не имеет значения, что вы написали в переменную. Обычно это признак того, что вы забыли сделать все, что вы хотели с ним сделать, или что переменная может быть удалена. В вашем примере вы никогда не читаете из intVar. Измените intVar = 20; на (void)intVar;, чтобы «прочитать» значение и отбросить результат. Вы найдете предупреждение исчезает.

Демонстрация: https://godbolt.org/g/L3rFqM

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

То, что вы присваиваете ему, не делает его «используемым» - так как функция в данный момент написана, оптимизирующий компилятор просто удалит присваивание, так как он не имеет видимых побочных эффектов, что делает переменную неиспользуемой.

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

У вас есть код, который пишет в переменную, но у вас нет кода, который читает из нее. В этом смысле переменная не используется.

Наблюдаемое поведение выполнения функции не изменится, если вы удалите строки, ссылающиеся на переменную. Это явный признак того, что переменная не используется.

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