Почему строковая версия 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*.


потому что реализация классов iostream не должна зависеть от строк.


проблема с потоковой библиотекой заключается в том, что она плохо спроектирована. В частности, функция-член getline вообще не должно быть. Свободная функция getline Он прав, он имеет несколько преимуществ: это не функция-член, это безопасно, не работает на необработанных буферах и не требует догадок.

необходимо отметить, что как функции - члены, так и свободные функции являются частью открытого интерфейса istream.