Definido en el archivo de cabecera <istream>
plantilla< clase CharT, |
Plantilla de clase basic_istream
Proporciona soporte de entrada de alto nivel en secuencias de caracteres. Las operaciones admitidas incluyen entrada con formato (como valores enteros o caracteres y cadenas separados por espacios en blanco) y entrada sin formato (como caracteres sin formato y matrices de caracteres). Esta funcionalidad se implementa en la interfaz proporcionada por la clase subyacente basic_ios
a la que se accede a través de la clase base . basic_streambuf
En la mayoría de las implementaciones de la biblioteca, basic_istream
hay un miembro de datos no heredado: se usa para almacenar el valor devuelto por basic_istream::gcount().
misceláneas
Sincronizar con el dispositivo de almacenamiento subyacente
std::basic_istream<CharT,Traits>::sync
sincronización int(); |
Sincroniza el búfer de entrada con la fuente de datos asociada.
Se comporta como una función de entrada sin formato , excepto que no afecta la construcción de gcount() y después de verificar el objeto centinela,
Si rdbuf() es un puntero nulo, se devuelve -1.
De lo contrario, llame a rdbuf()->pubsync(). Si la función devuelve -1, llama a setstate(badbit) y devuelve -1. De lo contrario, devuelve 0.
parámetro
(ninguno)
valor devuelto
0 en caso de éxito, -1 en caso de falla o si la transmisión no admite esta operación (sin almacenamiento en búfer).
Aviso
Al igual que readsome(), está definido por la implementación si esta función hace algo con el flujo proporcionado por la biblioteca. La intención suele ser que la siguiente operación de lectura recoja cualquier cambio que se haya realizado en la secuencia de entrada asociada después de que el búfer de flujo haya llenado por última vez su área de recuperación. Para hacer esto, sync()
vacíe el área de búsqueda, vuelva a llenarla o no haga nada. La excepción notable es Visual Studio, donde esta operación descarta la salida sin procesar cuando se invoca en el flujo de entrada estándar.
ejemplo de llamada
#include <iostream>
#include <fstream>
void file_abc()
{
std::ofstream f("test.txt");
f << "abc\n";
}
void file_123()
{
std::ofstream f("test.txt");
f << "123\n";
}
int main()
{
file_abc(); // 文件现在含 "abc"
std::ifstream f("test.txt");
std::cout << "Reading from the file\n";
char c;
f >> c;
std::cout << c;
file_123(); // 文件现在含 "123"
f >> c;
std::cout << c;
f >> c;
std::cout << c << '\n';
f.close();
file_abc(); // 文件现在含 "abc"
f.open("test.txt");
std::cout << "Reading from the file, with sync()\n";
f >> c;
std::cout << c;
file_123(); // 文件现在含 "123"
f.sync();
f >> c;
std::cout << c;
f >> c;
std::cout << c << '\n';
}
producción
el objeto de flujo de intercambio, excepto el búfer asociado
std::basic_istream<CharT,Traits>::swap
protegido: |
(desde C++11) |
Llame a basic_ios::swap(rhs) para intercambiar todos los miembros de datos de la clase base, excepto rdbuf(), que luego intercambia el rhs
valor del contador gcount() entre *this y . Esta función de intercambio está protegida: es llamada por las funciones de intercambio de las clases de flujo de entrada intercambiables std::basic_ifstream y std::basic_istringstream, que saben cómo intercambiar correctamente los búferes de flujo asociados.
parámetro
derecho | - | Un objeto basic_istream diferente del mismo tipo para intercambiar con |
ejemplo de llamada
#include <sstream>
#include <iostream>
#include <utility>
int main()
{
std::istringstream s1("hello");
std::istringstream s2("bye");
s1.swap(s2); // OK : istringstream 拥有公开的 swap()
std::swap(s1, s2); // OK :调用 s1.swap(s2)
// std::cin.swap(s2); // 错误: swap 是受保护成员
std::cout << s1.rdbuf();
}
producción