Разница между" внутренним "и" связанным " буфером потока
от http://www.cplusplus.com/reference/ios/ios/rdbuf/:
некоторые производные классы потока (такие как stringstream и fstream) поддерживают свои собственные внутренний буфер потока, С которыми они связаны на строительстве. Вызов этой функции для изменения связанный буфер потока не будет иметь никакого влияния на это внутренний буфер потока: поток будет иметь связанный буфер потока что отличается от своего внутренний буфер потока (хотя операции ввода / вывода в потоках всегда используют связанный буфер потока, как возвращено этой функцией-членом).
и далее http://www.cplusplus.com/reference/fstream/ifstream/rdbuf/:
возвращает указатель на внутренний объект filebuf.
обратите внимание, однако, что это не обязательно то же самое, что и в настоящее время связанный буфер потока (возвращается ios:: rdbuf).
Так что внутренний буфер, если он не используется для операций ввода и вывода? И если это означает, что эти две строки могут возвращать два разных объекта, почему это может быть полезно?
std::stringstream ss;
ss.rdbuf(); // (1) returns "internal" stream buffer?
static_cast<std::ios&>(ss).rdbuf(); // (2) returns "associated" stream buffer?
1 ответов
внутренний буфер используется для операций ввода и вывода до момента вызова rdbuf
с другим аргументом. Тогда он просто сидит там.
вы всегда можете повторно включить его, позвонив
stream.basic_ios::rdbuf(stream.rdbuf());
обратите внимание, что внутренний буфер, например,std::fstream
всегда std::filebuf
объект принадлежит и управляется объектом stream, в то время как связанный буфер может быть любым streambuf
производного объекта. Поток хранит только указатель базового класса на него и не управляет его жизнь.
также обратите внимание, что термин "внутренний буфер" не используется стандартом. В стандарте используется немного другая терминология:
класс
basic_ifstream<charT, traits>
поддерживает чтение из имени файлов. Он используетbasic_filebuf<charT, traits>
объект для управления последовательностью. Для наглядности сохраненные данные представлены здесь в виде:-
sb
на