Почему этот код выдает предупреждение со ссылкой на запятую? - PullRequest
8 голосов
/ 14 апреля 2011

При ответе на этот вопрос я наткнулся на этот код ...

#include <iostream>

int main()
{
    int const income = 0;
    std::cout << "I'm sorry your income is: " < income;    // this is line 6
}

... которая содержит опечатку. Второй (предполагаемый) оператор << в строке 6 был случайно записан как <.

Кроме этого, компиляция кода с использованием GCC 4.3.4 или 4.4.3 приводит к предупреждению:

prog.cpp: In function ‘int main()’:
prog.cpp:6: warning: right-hand operand of comma has no effect

Мой вопрос: почему выдается именно это предупреждение? К какому оператору запятой это относится?

ПРИМЕЧАНИЕ. Я не защищаю сознательно использование одного < в выражении cout. Я просто наткнулся на это предупреждение, пытаясь найти ответ на другой вопрос, который у меня есть. связано, и мне любопытно, почему компилятор генерирует его.

Ответы [ 2 ]

6 голосов
/ 14 апреля 2011

Я думаю, что они просто забыли изменить текст предупреждения

int main() {
   1, 2;
}

prog.cpp:2: warning: left-hand operand of comma has no effect
prog.cpp:2: warning: right-hand operand of comma has no effect

Оператор expr, expr вычисляет левый операнд, затем вычисляет правый операнд и выдает результат вычисления правого операнда.Если правый операнд не имеет никакого эффекта и его значение не используется, это, вероятно, ошибка в программе.

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

1 голос
/ 14 апреля 2011

Ваша программа не выдает это предупреждение для меня с MSVC2010, она выдает только

предупреждение C4552: «<»: оператор не действует; ожидаемый оператор с побочным эффектом </p>

Так как это должно быть << до income;. (Примечание: Ideone вообще не выдает предупреждение.)

...