Partilhar via


basic_istream Classe

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, consulte basic_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 countde .

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 countde .

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>::maxigual, 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 longou 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, eofe 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 newpostemporá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, pubseekoffe 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, tieflush, ws, e flags. skipwssetstate

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, eofe 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