LINUX.ORG.RU
решено ФорумTalks

как это работает?

 


0

1

Пишу лабу на cpp, в ходе понадобилось сделать защиту от дурака в виде проверки введенного (число/плохое_слово). Адекватного решения сам не нашел, полез в гугл, и нашел это.

Код:

int t;
if (cin >> t)
cout << "Ok" << endl;
else
cout << "Not ok" << endl;

Объясните на пальцах как это работает

Deleted

cin вернет значение false, если у него не получится положить считанные данные в целочисленную переменную t, иначе вернет true.

IvS
()
Ответ на: комментарий от redgremlin

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

IvS
()

Раньше класс потоков имел оператор приведения к типу void*, значения которого, в свою очередь, приводятся к типу bool в булевом контексте. А в новом стандарте происходит уже приведение к bool.

theNamelessOne ★★★★★
()
Ответ на: комментарий от redgremlin

cin вернет значение false

Не cin, а >>. Точнее, его вариант >>(istream, int). Перегрузка во все поля.

Не. operator >> всегда возвращает istream&. Но за счет того, что класс ios_base содержит оператор приведения operator void* bool () const (который возвращает !fail()), значения типа istream имеют смысл в булевом контексте.

Пруфы в стандарте.

theNamelessOne ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.