Partilhar via


Classe basic_istream

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, cujas características de caractere são determinadas 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>

Comentários

A maioria das funções de membro que sobrecarrega operator>> é composta por funções de entrada formatadas. Elas 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 membro são funções de entrada sem formatação. Elas 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 final do arquivo ao extrair elementos. Para obter mais informações, consulte setstate.

Um objeto da 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 sem formatação (chamada count no código anterior).

Exemplo

Veja o exemplo da Classe basic_ifstream 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 sem formatação.
get Lê um ou mais caracteres do fluxo de entrada.
getline Lê uma linha do fluxo de entrada.
ignore Faz vários elementos serem ignorados na 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 armazena-os em uma matriz.
readsome Ler apenas do buffer.
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 esse objeto basic_istream pelo parâmetro do objeto basic_istream fornecido.
sync Sincroniza o dispositivo de entrada associado ao fluxo com o buffer do fluxo.
tellg Relata a atual posição de leitura 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 para esse objeto. Essa é uma atribuição de movimentação que envolve uma referência rvalue que não deixa uma cópia.

Requisitos

Cabeçalho: <istream>

Namespace: 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 esse for um fluxo padrão; caso contrário, false.

right
Um objeto basic_istream a ser copiado.

Comentários

O primeiro construtor inicializa a classe base chamando init(strbuf). Ele 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 do tópico de visão geral da Classe basic_istream.

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 de basic_ifstream::basic_ifstream para saber mais sobre fluxos de entrada.

basic_istream::gcount

Retorna o número de caracteres lidos durante a última entrada sem formatação.

streamsize gcount() const;

Valor de retorno

A contagem de extração.

Comentários

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 a serem lidos de strbuf.

delimiter
O caractere que deve terminar a leitura se for encontrado antes de count.

str
Uma cadeia de caracteres na qual gravar.

Ch
Um caractere a obter.

strbuf
Um buffer no qual gravar.

Valor de retorno

O formulário sem parâmetros de get retorna o elemento read como um inteiro ou fim do arquivo. Os formulários restantes retornaram o fluxo (*this).

Comentários

A primeira função de entrada não formatada extrai um elemento, se possível, como se retornando por rdbuf->sbumpc. Caso contrário, ele retornará 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 elemento int_type meta da mesma maneira. Se a comparação de meta for igual a traits_type::eof, a função chama setstate(failbit). Caso contrário, ela 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 até count - 1 elementos e armazena-os na matriz que começa em str. Ela sempre armazena char_type após quaisquer elementos extraídos que armazene. Em ordem de teste, a extração é interrompida:

  • Ao final do arquivo.

  • Depois que a função extrai um elemento que se compara como igual a delimiter. Nesse caso, o elemento é colocado de volta na sequência controlada.

  • Depois que a função extrai elementos count - 1.

Se a função não extrair nenhum elemento, ela chamará setstate(failbit). Em qualquer caso, retorna *this.

A quinta função retorna get(strbuf, widen('\n')).

A sexta função extrai elementos e insere-os em strbuf. A extração para no fim do arquivo ou em um elemento que é comparável a delimiter, que não é extraído. Ele também interrompe, sem extrair o elemento em questão, se uma inserção falhar ou gerar uma exceção (que é detectada, mas não gerada novamente). 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 a serem lidos de strbuf.

delimiter
O caractere que deve terminar a leitura se for encontrado antes de count.

str
Uma cadeia de caracteres na qual gravar.

Valor de retorno

O fluxo (*this).

Comentários

A primeira dessas funções de entrada não formatadas retorna getline(str, count, widen('\n')).

A segunda função extrai até count - 1 elementos e armazena-os na matriz que começa em str. Ela sempre armazena o caractere de terminação de cadeia de caracteres depois de quaisquer os elementos extraídos que ela armazene. Em ordem de teste, a extração é interrompida:

  • Ao final do arquivo.

  • Depois que a função extrai um elemento que se compara como igual a delimiter. Nesse caso, o elemento não é colocado novamente e não é acrescentado à sequência controlada.

  • Depois que a função extrai elementos count - 1.

Se a função não extrair nenhum elemento ou elementos count - 1, ela chamará setstate(failbit). Em qualquer caso, 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 vários elementos serem ignorados na 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 ignorar da posição atual de leitura.

delimiter
O elemento que, se encontrado antes da contagem, faz com que ignore retorne, permitindo que todos os elementos após delimiter sejam lidos.

Valor de retorno

O fluxo (*this).

Comentários

A função de entrada não formatada extrai até count elementos e descarta-os. No entanto, se count for igual a numeric_limits<int>::max, é considerado como arbitrariamente grande. A extração para cedo no fim do arquivo ou em um elemento Ch, de modo que traits_type::to_int_type(Ch) é comparável 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).

Comentários

O cabeçalho <istream> também define vários operadores de extração global. 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 a terceira funções garantem que outros manipuladores, como hex, comportem-se de modo semelhante. As funções restantes 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 insere-os em strbuf. A extração para no fim do arquivo. Ela também parará sem extrair o elemento em questão se uma inserção falhar ou gerar uma exceção (que é detectada, mas não gerada novamente). 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 converte-o em um valor booliano 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>. 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);

extraem cada uma um campo e convertem-no 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);

extraem cada uma um campo e convertem-no 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, 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 para esse objeto. Essa é uma atribuição de movimentação que envolve uma referência rvalue que não deixa uma cópia.

basic_istream& operator=(basic_istream&& right);

Parâmetros

right
Uma referência rvalue a um objeto basic_ifstream.

Valor de retorno

Retorna *this.

Comentários

O operador do membro chama swap(right).

basic_istream::peek

Retorna o próximo caractere a ser lido.

int_type peek();

Valor de retorno

O próximo caractere que será lido.

Comentários

A função de entrada não formatada extrai um elemento, se possível, como se estivesse retornando rdbuf->sgetc. Caso contrário, ele retornará 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 caractere a colocar de volta no fluxo.

Valor de retorno

O fluxo (*this).

Comentários

A função de entrada não formatada realoca Ch, se possível, como se estivesse chamando rdbuf->sputbackc. Se rdbuf for um ponteiro nulo ou se a chamada para sputbackc retornar traits_type::eof, a função chamará setstate(badbit). Em qualquer caso, 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 armazena-os em uma matriz.

Esse método pode não ser seguro, 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 serem lidos.

Valor de retorno

O fluxo ( *this).

Comentários

A função de entrada não formatada extrai até count elementos e armazena-os no início da matriz em str. A extração para cedo no fim do arquivo, caso em que a função chama setstate(failbit). Em qualquer caso, 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 caractere.

Esse método pode não ser seguro, 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 readsome armazena os caracteres que lê.

count
O número de caracteres a serem lidos.

Valor de retorno

O número de caracteres de fato lidos, gcount.

Comentários

Essa função de entrada não formatada extrai até count elementos do fluxo de entrada e armazena-os na matriz str.

Essa função não aguarda entradas. Ela lê os dados que estão 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 com relação a way.

way
Uma das enumerações de ios_base::seekdir.

Valor de retorno

O fluxo (*this).

Comentários

A primeira função membro realiza uma busca absoluta, a segunda função membro executa uma busca relativa.

Observação

Não use a segunda função membro com arquivos de texto, porque C++ Padrão não dá suporte a buscas relativas em arquivos de texto.

If fail for false, a primeira função de membro chama newpos = rdbuf->pubseekpos(pos) para algum objeto temporário pos_type newpos. Se fail for false, a segunda função chama newpos = rdbuf->pubseekoff( off, way). Em ambos os casos, se for (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 farão 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;
   };

Comentários

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 não for zero.

Se após tal preparação, _Istr.good for false o construtor chamará _Istr.setstate(failbit). Em qualquer caso, o construtor armazena o valor retornado por _Istr.good em status. Uma chamada posterior para operator bool entrega esse valor armazenado.

Para obter mais informações, consulte good, tie, flush, ws, flags, skipws e setstate.

basic_istream::swap

Troca o conteúdo de dois basic_istream objetos.

void swap(basic_istream& right);

Parâmetros

right
Uma referência lvalue a um objeto basic_istream.

Comentários

Essa função membro chama basic_ios::swap(right). Ela também troca a contagem de extração com a contagem de extração para right. Para obter mais informações, consulte basic_ios::swap.

basic_istream::sync

Sincroniza o dispositivo de entrada associado ao 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, ela chamará rdbuf->pubsync. Se essa chamada retornar -1, a função chamará setstate(badbit) e retornará -1. Caso contrário, a função retorna zero. Para obter mais informações, consulte pubsync e setstate.

basic_istream::tellg

Relata a atual posição de leitura no fluxo.

pos_type tellg();

Valor de retorno

A posição atual no fluxo.

Comentários

Se fail for false, a função de membro retornará rdbuf->pubseekoff(0, cur, in). Caso contrário, ele retornará 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).

Comentários

A função de entrada não formatada coloca de volta o elemento anterior no fluxo, se possível, como se estivesse chamando rdbuf->sungetc. Se rdbuf for um ponteiro nulo ou se a chamada para sungetc retornar traits_type::eof, a função chamará setstate(badbit). Em qualquer caso, 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

Confira também

Acesso Thread-Safe na Biblioteca Padrão C++
Programação iostream
Convenções iostreams