Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Descreve um objeto que controla a extração de elementos e objetos codificados de um buffer de fluxo com elementos do tipo Char_T
, também conhecido como char_type
, cujos traços de caractere são determinados pela classe Tr
, também conhecida como traits_type
.
Sintaxe
template <class Char_T, class Tr = char_traits<Char_T>>
class basic_istream : virtual public basic_ios<Char_T, Tr>
Observações
A maioria das funções de membro que sobrecarregam operator>>
são funções de entrada formatadas. Eles seguem o padrão:
iostate state = goodbit;
const sentry ok(*this);
if (ok)
{
try
{
/*extract elements and convert
accumulate flags in state.
store a successful conversion*/
}
catch (...)
{
try
{
setstate(badbit);
}
catch (...)
{
}
if ((exceptions()& badbit) != 0)
throw;
}
}
setstate(state);
return (*this);
Muitas outras funções de membro são funções de entrada não formatadas. Eles seguem o padrão:
iostate state = goodbit;
count = 0; // the value returned by gcount
const sentry ok(*this, true);
if (ok)
{
try
{
/* extract elements and deliver
count extracted elements in count
accumulate flags in state */
}
catch (...)
{
try
{
setstate(badbit);
}
catch (...)
{
}
if ((exceptions()& badbit) != 0)
throw;
}
}
setstate(state);
Ambos os grupos de funções chamam setstate(eofbit)
se encontrarem o fim do arquivo durante a extração de elementos. Para obter mais informações, consulte setstate
.
Um objeto de classe basic_istream<Char_T, Tr>
armazena:
Um objeto base público virtual da classe
basic_ios<Char_T, Tr>
. Para obter mais informações, consultebasic_ios
.Uma contagem de extração para a última operação de entrada não formatada (chamada
count
no código anterior).
Exemplo
Veja o exemplo de basic_ifstream
Classe para saber mais sobre fluxos de entrada.
Construtores
Construtor | Descrição |
---|---|
basic_istream |
Constrói um objeto do tipo basic_istream . |
Funções de membro
Função de membro | Descrição |
---|---|
gcount |
Retorna o número de caracteres lidos durante a última entrada não formatada. |
get |
Lê um ou mais caracteres do fluxo de entrada. |
getline |
Lê uma linha do fluxo de entrada. |
ignore |
Faz com que vários elementos sejam ignorados da posição de leitura atual. |
peek |
Retorna o próximo caractere a ser lido. |
putback |
Coloca um caractere especificado no fluxo. |
read |
Lê um número especificado de caracteres do fluxo e os armazena em uma matriz. |
readsome |
Ler apenas a partir da memória intermédia. |
seekg |
Move a posição de leitura em um fluxo. |
sentry |
A classe aninhada descreve um objeto cuja declaração estrutura as funções de entrada formatadas e as funções de entrada não formatadas. |
swap |
Troca este basic_istream objeto pelo parâmetro de objeto fornecido basic_istream . |
sync |
Sincroniza o dispositivo de entrada associado do fluxo com o buffer do fluxo. |
tellg |
Relata a posição de leitura atual no fluxo. |
unget |
Coloca o caractere lido mais recentemente de volta no fluxo. |
Operadores
Operador | Descrição |
---|---|
operator>> |
Chama uma função no fluxo de entrada ou lê dados formatados do fluxo de entrada. |
operator= |
Atribui o basic_istream no lado direito do operador a este objeto. É uma tarefa de movimento que envolve uma rvalue referência que não deixa uma cópia para trás. |
Requerimentos
Cabeçalho:<istream>
Espaço de nomes: std
basic_istream::basic_istream
Constrói um objeto do tipo basic_istream
.
explicit basic_istream(
basic_streambuf<Char_T, Tr>* strbuf,
bool _Isstd = false);
basic_istream(basic_istream&& right);
Parâmetros
strbuf
Um objeto do tipo basic_streambuf.
_Isstd
true
se for um fluxo padrão; caso contrário, false
.
right
Um basic_istream
objeto para copiar.
Observações
O primeiro construtor inicializa a classe base chamando init(strbuf)
. Também armazena zero na contagem de extração. Para obter mais informações, consulte init
. E para obter mais informações sobre essa contagem de extração, consulte a seção Comentários da Visão geral da basic_istream
classe .
O segundo construtor inicializa a classe base chamando move(right)
. Ele também armazena right.gcount()
na contagem de extração e armazena zero na contagem de extração para right
.
Exemplo
Veja o exemplo para basic_ifstream::basic_ifstream
saber mais sobre fluxos de entrada.
basic_istream::gcount
Retorna o número de caracteres lidos durante a última entrada não formatada.
streamsize gcount() const;
Valor de retorno
A contagem de extração.
Observações
Use basic_istream::get
para ler caracteres não formatados.
Exemplo
// basic_istream_gcount.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
cout << "Type the letter 'a': ";
ws( cin );
char c[10];
cin.get( &c[0],9 );
cout << c << endl;
cout << cin.gcount( ) << endl;
}
a
Type the letter 'a': a
1
basic_istream::get
Lê um ou mais caracteres do fluxo de entrada.
int_type get();
basic_istream<Char_T, Tr>& get(Char_T& Ch);
basic_istream<Char_T, Tr>& get(Char_T* str, streamsize count);
basic_istream<Char_T, Tr>& get(Char_T* str, streamsize count, Char_T delimiter);
basic_istream<Char_T, Tr>& get(basic_streambuf<Char_T, Tr>& strbuf);
basic_istream<Char_T, Tr>& get(basic_streambuf<Char_T, Tr>& strbuf, Char_T delimiter);
Parâmetros
count
O número de caracteres para ler de strbuf
.
delimiter
O caractere que deve encerrar a leitura se for encontrado antes count
de .
str
Uma cadeia de caracteres na qual escrever.
Ch
Um personagem para obter.
strbuf
Um buffer no qual gravar.
Valor de retorno
A forma sem parâmetros de retorna o elemento lido como um inteiro ou fim de get
arquivo. Os formulários restantes retornam o fluxo (*this
).
Observações
A primeira função de entrada não formatada extrai um elemento, se possível, como se retornasse rdbuf->sbumpc
. Caso contrário, ele retorna traits_type::
eof
. Se a função não extrair nenhum elemento, ela chamará setstate(failbit)
. Para obter mais informações, consulte setstate
.
A segunda função extrai o int_type
elemento meta
da mesma maneira. Se meta
comparar igual a traits_type::eof
, a função chama setstate(failbit)
. Caso contrário, ele armazena traits_type::to_char_type(meta)
em Ch
. A função retorna *this
. Para obter mais informações, consulte to_char_type
.
A terceira função retorna get(str, count, widen('\n'))
.
A quarta função extrai elementos count - 1
e os armazena na matriz começando em str
. Ele sempre armazena char_type
depois de quaisquer elementos extraídos que armazena. Por ordem de ensaio, a extração para:
No final do arquivo.
Depois que a função extrai um elemento que compara igual a
delimiter
. Neste caso, o elemento é colocado de volta para a sequência controlada.Depois que a função extrai
count - 1
elementos.
Se a função não extrair nenhum elemento, ela chamará setstate(failbit)
. Em qualquer caso, ele retorna *this
.
A quinta função retorna get(strbuf, widen('\n'))
.
A sexta função extrai elementos e os insere em strbuf
. A extração para no fim do arquivo ou em um elemento que se compara igual ao delimiter
, que não é extraído. Ele também para, sem extrair o elemento em questão, se uma inserção falhar ou lançar uma exceção (que é capturada, mas não relançada). Se a função não extrair nenhum elemento, ela chamará setstate(failbit)
. Em qualquer caso, a função retorna *this
.
Exemplo
// basic_istream_get.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
char c[10];
c[0] = cin.get( );
cin.get( c[1] );
cin.get( &c[2],3 );
cin.get( &c[4], 4, '7' );
cout << c << endl;
}
1111
basic_istream::getline
Obtém uma linha do fluxo de entrada.
basic_istream<Char_T, Tr>& getline(
char_type* str,
streamsize count);
basic_istream<Char_T, Tr>& getline(
char_type* str,
streamsize count,
char_type delimiter);
Parâmetros
count
O número de caracteres para ler de strbuf
.
delimiter
O caractere que deve encerrar a leitura se for encontrado antes count
de .
str
Uma cadeia de caracteres na qual escrever.
Valor de retorno
O fluxo (*this
).
Observações
A primeira dessas funções de entrada não formatadas retorna getline(str, count, widen('\n'))
.
A segunda função extrai count - 1
elementos e os armazena na matriz começando em str
. Ele sempre armazena o caractere de terminação da cadeia de caracteres após quaisquer elementos extraídos que armazena. Por ordem de ensaio, a extração para:
No final do arquivo.
Depois que a função extrai um elemento que compara igual a
delimiter
. Nesse caso, o elemento não é colocado de volta e não é anexado à sequência controlada.Depois que a função extrai
count - 1
elementos.
Se a função não extrair nenhum elemento ou count - 1
elemento, ela chamará setstate(failbit)
. Em qualquer caso, ele retorna *this
. Para obter mais informações, consulte setstate
.
Exemplo
// basic_istream_getline.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
char c[10];
cin.getline( &c[0], 5, '2' );
cout << c << endl;
}
121
basic_istream::ignore
Faz com que vários elementos sejam ignorados da posição de leitura atual.
basic_istream<Char_T, Tr>& ignore(
streamsize count = 1,
int_type delimiter = traits_type::eof());
Parâmetros
count
O número de elementos a serem ignorados da posição de leitura atual.
delimiter
O elemento que, se encontrado antes da contagem, faz com ignore
que retorne e permita que todos os elementos depois delimiter
sejam lidos.
Valor de retorno
O fluxo (*this
).
Observações
A função de entrada não formatada extrai count
elementos e os descarta. Se count
for numeric_limits<int>::max
igual, no entanto, é tido como arbitrariamente grande. A extração para no início do arquivo ou em um elemento Ch
tal que traits_type::to_int_type(Ch)
se compara igual a delimiter
(que também é extraído). A função retorna *this
. Para obter mais informações, consulte to_int_type
.
Exemplo
// basic_istream_ignore.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
char chararray[10];
cout << "Type 'abcdef': ";
cin.ignore( 5, 'c' );
cin >> chararray;
cout << chararray;
}
Type 'abcdef': abcdef
def
basic_istream::operator>>
Chama uma função no fluxo de entrada ou lê dados formatados do fluxo de entrada.
basic_istream& operator>>(basic_istream& (* Pfn)(basic_istream&));
basic_istream& operator>>(ios_base& (* Pfn)(ios_base&));
basic_istream& operator>>(basic_ios<Char_T, Tr>& (* Pfn)(basic_ios<Char_T, Tr>&));
basic_istream& operator>>(basic_streambuf<Char_T, Tr>* strbuf);
basic_istream& operator>>(bool& val);
basic_istream& operator>>(short& val);
basic_istream& operator>>(unsigned short& val);
basic_istream& operator>>(int& val);
basic_istream& operator>>(unsigned int& val);
basic_istream& operator>>(long& val);
basic_istream& operator>>(unsigned long& val);
basic_istream& operator>>(long long& val);
basic_istream& operator>>(unsigned long long& val);
basic_istream& operator>>(void *& val);
basic_istream& operator>>(float& val);
basic_istream& operator>>(double& val);
basic_istream& operator>>(long double& val);
Parâmetros
Pfn
Um ponteiro de função.
strbuf
Um objeto do tipo stream_buf
.
val
O valor a ser lido do fluxo.
Valor de retorno
O fluxo (*this
).
Observações
O <istream>
cabeçalho também define vários operadores de extração globais. Para obter mais informações, consulte operator>> (<istream>)
.
A primeira função de membro garante que uma expressão do formulário istr >> ws
chame ws(istr)
e, em seguida, retorne *this
. Para obter mais informações, consulte ws
.
A segunda e terceira funções garantem que outros manipuladores, como hex
, se comportem de forma semelhante. As restantes funções são as funções de entrada formatadas.
A função:
basic_istream& operator>>(
basic_streambuf<Char_T, Tr>* strbuf);
extrai elementos, se strbuf
não for um ponteiro nulo, e os insere no strbuf
. A extração para no final do arquivo. Ele também para sem extrair o elemento em questão, se uma inserção falhar ou lançar uma exceção (que é capturada, mas não relançada). Se a função não extrair nenhum elemento, ela chamará setstate(failbit)
. Em qualquer caso, a função retorna *this
. Para obter mais informações, consulte setstate
.
A função:
basic_istream& operator>>(bool& val);
extrai um campo e o converte em um valor booleano chamando use_facet< num_get<Char_T, InIt>(getloc).get( InIt(rdbuf), Init(0), *this, getloc, val)
. Aqui, InIt
define-se como istreambuf_iterator<Char_T, Tr>
. A função retorna *this
.
Para obter mais informações, consulte use_facet
, getloc
, get
, rdbuf
, e istreambuf_iterator
.
Cada uma das funções:
basic_istream& operator>>(short& val);
basic_istream& operator>>(unsigned short& val);
basic_istream& operator>>(int& val);
basic_istream& operator>>(unsigned int& val);
basic_istream& operator>>(long& val);
basic_istream& operator>>(unsigned long& val);
basic_istream& operator>>(long long& val);
basic_istream& operator>>(unsigned long long& val);
basic_istream& operator>>(void *& val);
Extraia um campo e converta-o em um valor numérico chamando use_facet<num_get<Char_T, InIt>(getloc).get(InIt(rdbuf), Init(0), *this, getloc, val)
. Aqui, InIt
é definido como istreambuf_iterator<Char_T, Tr>
, e val
tem tipo long
, unsigned long
ou void *
conforme necessário.
Se o valor convertido não puder ser representado como o tipo de val
, a função chamará setstate(failbit)
. Em qualquer caso, a função retorna *this
. Para obter mais informações, consulte setstate
.
Cada uma das funções:
basic_istream& operator>>(float& val);
basic_istream& operator>>(double& val);
basic_istream& operator>>(long double& val);
Extraia um campo e converta-o em um valor numérico chamando use_facet<num_get<Char_T, InIt>(getloc).get(InIt(rdbuf), Init(0), *this, getloc, val)
. Aqui, InIt
é definido como istreambuf_iterator<Char_T, Tr>
, e val
tem tipo double
ou long double
conforme necessário.
Se o valor convertido não puder ser representado como o tipo de val
, a função chamará setstate(failbit)
. Em qualquer caso, ele retorna *this
.
Exemplo
// istream_basic_istream_op_is.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
ios_base& hex2( ios_base& ib )
{
ib.unsetf( ios_base::dec );
ib.setf( ios_base::hex );
return ib;
}
basic_istream<char, char_traits<char> >& somefunc(basic_istream<char, char_traits<char> > &i)
{
if ( i == cin )
{
cerr << "i is cin" << endl;
}
return i;
}
int main( )
{
int i = 0;
cin >> somefunc;
cin >> i;
cout << i << endl;
cin >> hex2;
cin >> i;
cout << i << endl;
}
basic_istream::operator=
Atribui o basic_istream
no lado direito do operador a este objeto. É uma tarefa de movimento que envolve uma rvalue
referência que não deixa uma cópia para trás.
basic_istream& operator=(basic_istream&& right);
Parâmetros
right
Uma rvalue
referência a um basic_ifstream
objeto.
Valor de retorno
Retorna *this
.
Observações
O operador membro chama swap(right)
.
basic_istream::peek
Retorna o próximo caractere a ser lido.
int_type peek();
Valor de retorno
O próximo personagem que será lido.
Observações
A função de entrada não formatada extrai um elemento, se possível, como se retornasse rdbuf->sgetc
. Caso contrário, ele retorna traits_type::eof
. Para obter mais informações, consulte sgetc
e eof
.
Exemplo
// basic_istream_peek.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
char c[10], c2;
cout << "Type 'abcde': ";
c2 = cin.peek( );
cin.getline( &c[0], 9 );
cout << c2 << " " << c << endl;
}
abcde
Type 'abcde': abcde
a abcde
basic_istream::putback
Coloca um caractere especificado no fluxo.
basic_istream<Char_T, Tr>& putback(
char_type Ch);
Parâmetros
Ch
Um personagem para colocar de volta no fluxo.
Valor de retorno
O fluxo (*this
).
Observações
A função de entrada não formatada coloca de volta Ch
, se possível, como se chamasse rdbuf->sputbackc
. Se rdbuf
for um ponteiro nulo, ou se a chamada para sputbackc
retornar traits_type::eof
, a função chama setstate(badbit)
. Em qualquer caso, ele retorna *this
.
Para obter mais informações, consulte rdbuf
, sputbackc
, eof
e setstate
.
Exemplo
// basic_istream_putback.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
char c[10], c2, c3;
c2 = cin.get( );
c3 = cin.get( );
cin.putback( c2 );
cin.getline( &c[0], 9 );
cout << c << endl;
}
qwq
basic_istream::read
Lê um número especificado de caracteres do fluxo e os armazena em uma matriz.
Esse método é potencialmente inseguro, pois depende do chamador para verificar se os valores passados estão corretos.
basic_istream<Char_T, Tr>& read(
char_type* str,
streamsize count);
Parâmetros
str
A matriz na qual ler os caracteres.
count
O número de caracteres a ler.
Valor de retorno
O fluxo ( *this
).
Observações
A função de entrada não formatada count
extrai elementos e os armazena na matriz começando em str
. A extração para no início do arquivo, caso em que a função chama setstate(failbit)
. Em qualquer caso, ele retorna *this
. Para obter mais informações, consulte setstate
.
Exemplo
// basic_istream_read.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
char c[10];
int count = 5;
cout << "Type 'abcde': ";
// Note: cin::read is potentially unsafe, consider
// using cin::_Read_s instead.
cin.read(&c[0], count);
c[count] = 0;
cout << c << endl;
}
abcde
Type 'abcde': abcde
abcde
basic_istream::readsome
Lê o número especificado de valores de caracteres.
Esse método é potencialmente inseguro, pois depende do chamador para verificar se os valores passados estão corretos.
streamsize readsome(
char_type* str,
streamsize count);
Parâmetros
str
A matriz na qual armazena os caracteres que readsome
lê.
count
O número de caracteres a ler.
Valor de retorno
O número de caracteres realmente lidos, gcount
.
Observações
Esta função de entrada não formatada extrai count
elementos do fluxo de entrada e armazena-os na matriz str
.
Esta função não espera pela entrada. Lê todos os dados disponíveis.
Exemplo
// basic_istream_readsome.cpp
// compile with: /EHsc /W3
#include <iostream>
using namespace std;
int main( )
{
char c[10];
int count = 5;
cout << "Type 'abcdefgh': ";
// cin.read blocks until user types input.
// Note: cin::read is potentially unsafe, consider
// using cin::_Read_s instead.
cin.read(&c[0], 2);
// Note: cin::readsome is potentially unsafe, consider
// using cin::_Readsome_s instead.
int n = cin.readsome(&c[0], count); // C4996
c[n] = 0;
cout << n << " characters read" << endl;
cout << c << endl;
}
basic_istream::seekg
Move a posição de leitura em um fluxo.
basic_istream<Char_T, Tr>& seekg(pos_type pos);
basic_istream<Char_T, Tr>& seekg(off_type off, ios_base::seekdir way);
Parâmetros
pos
A posição absoluta na qual mover o ponteiro de leitura.
off
Um deslocamento para mover o ponteiro de leitura em relação a way
.
way
Uma das ios_base::seekdir
enumerações.
Valor de retorno
O fluxo (*this
).
Observações
A primeira função de membro executa uma busca absoluta, a segunda função de membro executa uma busca relativa.
Observação
Não use a função de segundo membro com arquivos de texto, porque o Standard C++ não suporta pesquisas relativas em arquivos de texto.
Se fail
for false
, a primeira função de membro chama newpos = rdbuf->pubseekpos(pos)
, para algum pos_type
objeto newpos
temporário. Se fail
for false
, a segunda função chama newpos = rdbuf->pubseekoff( off, way)
. Em ambos os casos, se (off_type)newpos == (off_type)(-1)
(a operação de posicionamento falhar), a função chama istr.setstate(failbit)
. Ambas as funções retornam *this
.
Se fail
for true
, as funções de membro não fazem nada.
Para obter mais informações, consulte rdbuf
, pubseekpos
, pubseekoff
e setstate
.
Exemplo
// basic_istream_seekg.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
int main ( )
{
using namespace std;
ifstream file;
char c, c1;
file.open( "basic_istream_seekg.txt" );
file.seekg(2); // seek to position 2
file >> c;
cout << c << endl;
}
basic_istream::sentry
A classe aninhada descreve um objeto cuja declaração estrutura as funções de entrada formatadas e não formatadas.
class sentry {
public:
explicit sentry(
basic_istream<Char_T, Tr>& _Istr,
bool _Noskip = false);
operator bool() const;
};
Observações
Se _Istr.good
for true
, o construtor:
Chama
_Istr.tie->flush
se_Istr.tie
não for um ponteiro nulo.Efetivamente chama
ws(_Istr)
se_Istr.flags & skipws
for diferente de zero.
Se após tal preparação, _Istr.good
é false
, o construtor chama _Istr.setstate(failbit)
. Em qualquer caso, o construtor armazena o valor retornado por _Istr.good
em status
. Uma chamada posterior para operator bool
entregar esse valor armazenado.
Para obter mais informações, consulte , , , good
, tie
flush
, ws
, e flags
. skipws
setstate
basic_istream::swap
Troca o conteúdo de dois basic_istream
objetos.
void swap(basic_istream& right);
Parâmetros
right
Uma lvalue
referência a um basic_istream
objeto.
Observações
A função de membro chama basic_ios::swap(right)
. Também troca a contagem de extração pela contagem de extração por right
. Para obter mais informações, consulte basic_ios::swap
.
basic_istream::sync
Sincroniza o dispositivo de entrada associado do fluxo com o buffer do fluxo.
int sync();
Valor de retorno
Se rdbuf
for um ponteiro nulo, a função retornará -1. Caso contrário, chama rdbuf->pubsync
. Se essa chamada retornar -1, a função chamará setstate(badbit)
e retornará -1. Caso contrário, a função retornará zero. Para obter mais informações, consulte pubsync
e setstate
.
basic_istream::tellg
Relata a posição de leitura atual no fluxo.
pos_type tellg();
Valor de retorno
A posição atual no fluxo.
Observações
Se fail
for false
, a função de membro retornará rdbuf->pubseekoff(0, cur, in)
. Caso contrário, ele retorna pos_type(-1)
. Para obter mais informações, consulte rdbuf
e pubseekoff
.
Exemplo
// basic_istream_tellg.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
int main()
{
using namespace std;
ifstream file;
char c;
streamoff i;
file.open("basic_istream_tellg.txt");
i = file.tellg();
file >> c;
cout << c << " " << i << endl;
i = file.tellg();
file >> c;
cout << c << " " << i << endl;
}
basic_istream::unget
Coloca o caractere lido mais recentemente de volta no fluxo.
basic_istream<Char_T, Tr>& unget();
Valor de retorno
O fluxo (*this
).
Observações
A função de entrada não formatada coloca de volta o elemento anterior no fluxo, se possível, como se chamasse rdbuf->sungetc
If rdbuf
é um ponteiro nulo, ou se a chamada para sungetc
retornar traits_type::eof
, a função chama setstate(badbit)
. Em qualquer caso, ele retorna *this
.
Para obter mais informações, consulte sungetc
, eof
e setstate
. E para obter informações sobre como unget
pode falhar, consulte basic_streambuf::sungetc
.
Exemplo
// basic_istream_unget.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
char c[10], c2;
cout << "Type 'abc': ";
c2 = cin.get( );
cin.unget( );
cin.getline( &c[0], 9 );
cout << c << endl;
}
abc
Type 'abc': abc
abc
Ver também
segurança de threads na biblioteca padrão C++
iostream
Programação
iostreams
Convenções