Подтвердить что ты не робот

Typo с "cout <myint". Почему это работает?

У меня есть этот код, и я много часов искал, почему он не смог распечатать мой доход.

int const income = 0;
std::cout << "I'm sorry, your income is: " < income;

До тех пор, пока я не обнаружил, что пропустил писать <<, но написал <. Почему компилятор не обнаруживает это и не выполняет ошибку? Я не уверен, почему сравнение cout имеет смысл?

4b9b3361

Ответ 1

интегральная постоянная 0 также является константой нулевого указателя - ее можно сравнить с результатом ostream operator void *. Обратите внимание, что он будет терпеть неудачу, если константа имеет любое значение, но 0.

Ответ 2

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

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

... хотя почему это предупреждение, а не ошибка, я не знаю.

РЕДАКТИРОВАТЬ: На самом деле, я не знаю, какую запятую он имеет в виду, потому что этот код:

int const income = 0;
std::cout << "I'm sorry your income is: " < income;

... генерирует одно и то же предупреждение (см. здесь).

Ответ 3

Прототипы < оператор:

    ​bool T::operator <(const T& b) const;

Итак, я думаю, что компилятор транслирует аргумент как тип этого экземпляра. Включили ли вы все предупреждения, такие как -Wall

Ответ 4

Он компилируется с помощью g++ 4.4.3

#include  <iostream>

int main (void)
{
   int const income = 0;
   std::cout << "I'm sorry, your income is: " < income;
}

Однако при запуске с -Wall (хорошая практика!) у меня появилось смешное сообщение:

:~/stack$ g++ test.cpp -o temp
:~/stack$ g++ -Wall test.cpp -o temp
test.cpp: In function 'int main()':
test.cpp:5: warning: right-hand operand of comma has no effect

Не знаю, что он на самом деле делает (или пытается сделать)...