Почему вы должны избегать ввода оператора (оператора >>) в С++?

В этот вопрос автор принятого ответа не рекомендует использовать оператор ввода, потому что:

operator>> подчиняется iomanip манипуляторам потока и другим "смешным" материалам, поэтому вы никогда не можете быть уверены, что он делает то, что рекламируется.

Но что это значит? Почему мы должны избегать оператора ввода С++ при программировании на С++?

В книгах, которые я прочитал из The Definitive С++ Book Guide and List, не упоминалось об этом, они ввели и использовали оператор ввода. Я не нашел ничего полезного в этой теме в Интернете.

Спасибо!

p.s: Извините, но у меня недостаточно репутации, чтобы задать свой вопрос в этой теме.

Ответ 1

Единственное, о чем я могу думать, это тот факт, что оператор → сохраняет множество настроек между приложениями. Например:

std::ifstream fin("input.txt");
std::string str;
double num;

someOtherFunction(fin);

while (fin >> str >> num)
{
   //do something
}

выглядит довольно невинно, если не считать:

void someOtherFunction(std::ifstream& fin){
    fin.width(1); 
    fin.setf(/* some flags here */); 
    //...
}

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

Ответ 2

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