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