Я тестировал блок кода из книги C++ PL и нашел следующий фрагмент кода (я не хотел чувствовать, что я копировал его из книга моего IDE, так что я, по крайней мере, изменил имена переменных):istream :: operator >> or istream :: get
istream& operator>> (istream& is, MyContact& mc)
{
char ch1, ch2;
string ContactName{""};
if (is>>ch1 && is>>ch2 && ch1=='{' && ch2=='"')
{
while(is>>ch1 && ch1 != '"')
ContactName+=ch1;
if (is>>ch1 && ch1==',')
{
int ContactAge=0;
if (is>>ContactAge>>ch1 && ch1=='}')
{
mc={ContactName, ContactAge};
return is;
}
}
}
is.setstate(ios_base::failbit);
return is;
}
по this link IStream :: получить «Выделяет один символ из потока»
И по this link IStream :: оператор >> «Извлекает как можно больше символов из потока»
Из любопытства я заменил
if (is>>ch1 && is>>ch2 && ch1=='{' && ch2=='"')
с
if (is.get(ch1) && is.get(ch2) && ch1=='{' && ch2=='"')
И это сработало. Отсутствие ошибок компиляции и программа, видимо, не сделал то, что он должен был сделать, теперь мой вопрос:
Почему оператор >>
используется в контексте, где мы извлечь один символ, когда is.get()
будет в равной степени функциональной?
Ну, это не более трех символов. – NathanOliver
Это было бы еще один тест 'if (is >> ch1 >> ch2 && ch1 == '{' && ch2 == '"') ' –
@LokiAstari Вы правы. Я проверю книгу, возможно, автор использует это так и я не заметил (в конце концов, это в строке if (is >> ContactAge >> ch1 && ch1 == '}')) – Compa