Почему строковая версия getline не является функцией-членом?
на есть персонаж версия что это функция-член, а также глобальная версия это требует строк. Почему они оба не являются функциями-членами? Текущий способ заставляет думать, что нет Строковой версии.
3 ответов
istream& istream::getline(char* s, streamsize n) является частью интерфейса потока.
istream& getline(istream& is, string& str) это расширение метод string библиотека (как istream &operator>>(istream&, string&)).
этот дизайн, вероятно, был выбран для того, чтобы отделить iostreams С строка, as fstream::open() также не принимает std::string аргументов, а скорее const char*.
проблема с потоковой библиотекой заключается в том, что она плохо спроектирована. В частности, функция-член getline вообще не должно быть. Свободная функция getline Он прав, он имеет несколько преимуществ: это не функция-член, это безопасно, не работает на необработанных буферах и не требует догадок.
необходимо отметить, что как функции - члены, так и свободные функции являются частью открытого интерфейса istream.