Partilhar via


Classe basic_ios

O modelo de classe descreve as funções membro e de armazenamento comuns a ambos os fluxos de entrada (do modelo de classe basic_istream) e os fluxos de saída (do modelo de classe basic_ostream) que dependem dos parâmetros do modelo. (A classe ios_base descreve o que é comum e não depende de parâmetros de modelo.) Um objeto de classe basic_ios<class Elem, class Traits> ajuda a controlar um fluxo com elementos do tipo Elem, cujas características de caractere são determinadas pela classe Traits.

Sintaxe

template <class Elem, class Traits>
class basic_ios : public ios_base

Parâmetros

Elem
Um tipo de caractere.

Traits
Um tipo que fornece informações sobre o tipo de caractere, usa char_traits < Elem > por padrão.

Comentários

Um objeto da classe basic_ios<class Elem, class Traits> armazena:

Para obter mais informações, consulte basic_istream e basic_streambuf.

Construtores

Construtor Descrição
basic_ios Constrói a classe basic_ios.

Typedefs

Nome do tipo Descrição
char_type Um sinônimo para o parâmetro de modelo Elem.
int_type Um sinônimo de Traits::int_type.
off_type Um sinônimo de Traits::off_type.
pos_type Um sinônimo de Traits::pos_type.
traits_type Um sinônimo para o parâmetro de modelo Traits.

Funções de membro

Função de membro Descrição
bad Indica a perda de integridade do buffer de fluxo.
clear Limpa todos os sinalizadores de erro.
copyfmt Copia sinalizadores de um fluxo para outro.
eof Indica se o final de um fluxo foi atingido.
exceptions Indica quais exceções serão lançadas pelo fluxo.
fail Indica falha ao extrair um campo válido de um fluxo.
fill Especifica ou retorna o caractere que será usado quando o texto não for tão grande quanto o fluxo.
good Indica que o fluxo está em boas condições.
imbue Altera a localidade.
init Chamado por construtores basic_ios.
move Move todos os valores, exceto o ponteiro para o buffer de fluxo, do parâmetro para o objeto atual.
narrow Localiza o char equivalente para um determinado char_type.
rdbuf Encaminha o fluxo para um buffer especificado.
rdstate Lê o estado dos bits para sinalizadores.
set_rdbuf Atribui um buffer de fluxo para ser o buffer de leitura para esse objeto de fluxo.
setstate Define sinalizadores adicionais.
swap Troca os valores nesse objeto basic_ios por aqueles de outro objeto basic_ios. Os ponteiros para buffers de fluxo não são trocados.
tie Garante que um fluxo seja processado antes de outro.
widen Localiza o char_type equivalente a um determinado char.

Operadores

Operador Descrição
explicit operator bool Permite o uso de um objeto basic_ios como um bool. Conversão de tipo automática é desabilitada para evitar efeitos colaterais comuns não intencionais.
operator void * Indica se o fluxo ainda é válido.
operator! Indica se o fluxo não é inválido.

Requisitos

Cabeçalho: <ios>

Namespace: std

basic_ios::bad

Indica a perda de integridade do buffer de fluxo

bool bad() const;

Valor de retorno

true se rdstate & badbit for diferente de zero; caso contrário false.

Para obter mais informações sobre badbito , consulte ios_base::iostate.

Exemplo

// basic_ios_bad.cpp
// compile with: /EHsc
#include <iostream>

int main( void )
{
    using namespace std;
    bool b = cout.bad( );
    cout << boolalpha;
    cout << b << endl;

    b = cout.good( );
    cout << b << endl;
}

basic_ios::basic_ios

Constrói a classe basic_ios.

explicit basic_ios(basic_streambuf<Elem,  Traits>* sb);
basic_ios();

Parâmetros

sb
Buffer padrão para armazenar elementos de entrada ou saída.

Comentários

O primeiro construtor inicializa seus objetos de membro chamando init(_ Sb). O segundo construtor (protegido) deixa seus objetos do membro não inicializados. Uma chamada posterior a init precisa inicializar o objeto antes de ser destruída com segurança.

basic_ios::char_type

Um sinônimo para o parâmetro de modelo Elem.

typedef Elem char_type;

basic_ios::clear

Limpa todos os sinalizadores de erro.

void clear(iostate state = goodbit, bool reraise = false);
void clear(io_state state);

Parâmetros

state
(Opcional) Os sinalizadores a serem definidos após limpeza de todos os sinalizadores. Assume o padrão de goodbit.

reraise
(Opcional) Especifica se a exceção deve ser gerada novamente. Assume false por padrão (não irá gerar novamente a exceção).

Comentários

Os sinalizadores são goodbit, failbit, eofbit e badbit. Testar esses sinalizadores com good, bad, eof e fail

A função de membro substitui as informações de estado de fluxo armazenadas com:

state | (rdbuf != 0 goodbit : badbit)

Se state&exceptions for diferente de zero, gerará um objeto da classe failure.

Para obter mais informações, consulte rdbuf e exceptions.

Exemplo

Confira rdstate e getline para obter exemplos usando clear.

basic_ios::copyfmt

Copia sinalizadores de um fluxo para outro.

basic_ios<Elem, Traits>& copyfmt(
const basic_ios<Elem, Traits>& right);

Parâmetros

right
O fluxo cujos sinalizadores você deseja copiar.

Valor de retorno

O objeto this para o fluxo para o qual você está copiando os sinalizadores.

Comentários

A função membro relata o evento de retorno de chamada erase_event. Em seguida, ela copia o caractere de preenchimento, o ponteiro de ligação e as informações de formatação de right para *this. Antes de alterar a máscara de exceção, ela relata o evento de retorno de chamada copyfmt_event. Se, após a cópia estar concluída, state&exceptions for diferente de zero, a função chamará clear efetivamente com o argumento rdstate. Ele retorna *this.

Exemplo

// basic_ios_copyfmt.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
    using namespace std;
    ofstream x( "test.txt" );
    int i = 10;

    x << showpos;
    cout << i << endl;
    cout.copyfmt( x );
    cout << i << endl;
}

basic_ios::eof

Indica se o final de um fluxo foi atingido.

bool eof() const;

Valor de retorno

true se o fim do fluxo tiver sido atingido, false caso contrário.

Comentários

A função membro retorna true se rdstate & eofbit for diferente de zero. Para obter mais informações sobre eofbito , consulte ios_base::iostate.

Exemplo

// basic_ios_eof.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

using namespace std;

int main( int argc, char* argv[] )
{
    fstream   fs;
    int n = 1;
    fs.open( "basic_ios_eof.txt" );   // an empty file
    cout << boolalpha
    cout << fs.eof() << endl;
    fs >> n;   // Read the char in the file
    cout << fs.eof() << endl;
}

basic_ios::exceptions

Indica quais exceções serão lançadas pelo fluxo.

iostate exceptions() const;
void exceptions(iostate Newexcept);
void exceptions(io_state Newexcept);

Parâmetros

Newexcept
Os sinalizadores que você deseja que gerem uma exceção.

Valor de retorno

Os sinalizadores atualmente especificados para gerar uma exceção para o fluxo.

Comentários

A primeira função membro retorna a máscara de exceção armazenada. A segunda função membro armazena _Except na máscara de exceção e retorna o valor armazenado anterior dela. Armazenar uma nova máscara de exceção pode gerar uma exceção assim como a chamada clear(rdstate).

Exemplo

// basic_ios_exceptions.cpp
// compile with: /EHsc /GR
#include <iostream>

int main( )
{
    using namespace std;

    cout << cout.exceptions( ) << endl;
    cout.exceptions( ios::eofbit );
    cout << cout.exceptions( ) << endl;
    try
    {
        cout.clear( ios::eofbit );   // Force eofbit on
    }
    catch ( exception &e )
    {
        cout.clear( );
        cout << "Caught the exception." << endl;
        cout << "Exception class: " << typeid(e).name()  << endl;
        cout << "Exception description: " << e.what() << endl;
    }
}
0
1
Caught the exception.
Exception class: class std::ios_base::failure
Exception description: ios_base::eofbit set

basic_ios::fail

Indica falha ao extrair um campo válido de um fluxo.

bool fail() const;

Valor de retorno

true se rdstate & (badbit|failbit) for diferente de zero; caso contrário false.

Para obter mais informações sobre failbito , consulte ios_base::iostate.

Exemplo

// basic_ios_fail.cpp
// compile with: /EHsc
#include <iostream>

int main( void )
{
    using namespace std;
    bool b = cout.fail( );
    cout << boolalpha;
    cout << b << endl;
}

basic_ios::fill

Especifica ou retorna o caractere que será usado quando o texto não for tão grande quanto o fluxo.

char_type fill() const;
char_type fill(char_type Char);

Parâmetros

Char
O caractere que você deseja usar como caractere de preenchimento.

Valor de retorno

O caractere de preenchimento atual.

Comentários

A primeira função membro retorna o caractere de preenchimento armazenado. A segunda função membro armazena Char no caractere de preenchimento e retorna seu valor armazenado anterior.

Exemplo

// basic_ios_fill.cpp
// compile with: /EHsc
#include <iostream>
#include <iomanip>

int main( )
{
    using namespace std;

    cout << setw( 5 ) << 'a' << endl;
    cout.fill( 'x' );
    cout << setw( 5 ) << 'a' << endl;
    cout << cout.fill( ) << endl;
}
a
xxxxa
x

basic_ios::good

Indica que o fluxo está em boas condições.

bool good() const;

Valor de retorno

true se rdstate == goodbit (nenhum sinalizador de estado está definido), caso contrário, false.

Para obter mais informações sobre goodbito , consulte ios_base::iostate.

Exemplo

Confira basic_ios::bad para ver um exemplo de como usar good.

basic_ios::imbue

Altera a localidade.

locale imbue(const locale& Loc);

Parâmetros

Loc
Uma cadeia de caracteres de localidade.

Valor de retorno

A localidade anterior.

Comentários

Se rdbuf não for um ponteiro NULL, a função membro chamará

rdbuf-> pubimbue(_ Loc)

Em qualquer caso, retorna ios_base::imbue(_ Loc).

Para obter mais informações, consulte pubimbue e ios_base::imbue.

Exemplo

// basic_ios_imbue.cpp
// compile with: /EHsc
#include <iostream>
#include <locale>

int main( )
{
    using namespace std;

    cout.imbue( locale( "french_france" ) );
    double x = 1234567.123456;
    cout << x << endl;
}

basic_ios::init

Chamado por construtores basic_ios.

void init(basic_streambuf<Elem,Traits>* _Sb, bool _Isstd = false);

Parâmetros

_Sb
Buffer padrão para armazenar elementos de entrada ou saída.

_Isstd
Especifica se esse é um fluxo padrão.

Comentários

A função membro armazena valores em todos os objetos membro, de modo que:

  • rdbuf retorna _Sb.

  • tie retorna um ponteiro NULL.

  • rdstate retornará goodbit se _Sb não for zero; caso contrário, retornará badbit.

  • exceptions retorna goodbit.

  • flags retorna skipws | dec. Para obter mais informações, consulte skipws e dec.

  • width retorna 0.

  • precision retorna 6.

  • fill retorna o caractere de espaço.

  • getloc retorna locale::classic.

  • iword retorna zero e pword retorna um ponteiro NULL para todos os valores de argumento.

basic_ios::int_type

Um sinônimo de traits_type::int_type.

typedef typename traits_type::int_type int_type;

basic_ios::move

Move todos os valores, exceto o ponteiro para o buffer de fluxo, do parâmetro para o objeto atual.

void move(basic_ios&& right);

Parâmetros

right
O objeto ios_base do qual mover valores.

Comentários

A função membro protegida move todos os valores armazenados em right para *this, exceto o stream buffer pointer armazenado, que permanece inalterado em right e definido como um ponteiro NULL em *this. O tie pointer armazenado é definido como um ponteiro NULL em right.

basic_ios::narrow

Localiza o char equivalente para um determinado char_type.

char narrow(char_type Char, char Default = '\0') const;

Parâmetros

Char
O char a ser convertido.

Default
O char que você deseja que seja retornado se nenhum equivalente for encontrado.

Valor de retorno

O equivalente char para um determinado char_type.

Comentários

A função membro retorna use_facet<ctype<E>>(getloc()).narrow(Char, Default).

Para obter mais informações, consulte use_facet e getloc.

Exemplo

// basic_ios_narrow.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
#include <wchar.h>

int main( )
{
    using namespace std;
    wchar_t *x = L"test";
    char y[10];
    cout << x[0] << endl;
    wcout << x << endl;
    y[0] = wcout.narrow( x[0] );
    cout << y[0] << endl;
}

basic_ios::off_type

Um sinônimo de traits_type::off_type.

typedef typename traits_type::off_type off_type;

basic_ios::operator void *

Indica se o fluxo ainda é válido.

operator void *() const;

Valor de retorno

O operador retorna um ponteiro NULL somente se fail.

Exemplo

// basic_ios_opgood.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
    using namespace std;
    cout << (bool)(&cout != 0) << endl;   // Stream is still good
}
1

basic_ios::operator!

Indica se o fluxo não é inválido.

bool operator!() const;

Valor de retorno

Retorna o mesmo que a chamada a basic_ios::fail

Exemplo

// basic_ios_opbad.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
    using namespace std;
    cout << !cout << endl;   // Stream is not bad
}
0

basic_ios::operator bool

Permite o uso de um objeto basic_ios como um bool. Conversão de tipo automática é desabilitada para evitar efeitos colaterais comuns não intencionais.

explicit operator bool() const;

Comentários

Retorna true se o fluxo não tem erros; caso contrário, false.

basic_ios::pos_type

Um sinônimo de traits_type::pos_type.

typedef typename traits_type::pos_type pos_type;

basic_ios::rdbuf

Encaminha o fluxo para um buffer especificado.

basic_streambuf<Elem, Traits> *rdbuf() const;
basic_streambuf<Elem, Traits> *rdbuf(
basic_streambuf<Elem, Traits>* _Sb);

Parâmetros

_Sb
Um fluxo.

Comentários

A primeira função membro retorna o ponteiro de buffer de fluxo armazenado.

A segunda função membro armazena _Sb no ponteiro de buffer de fluxo armazenadas e retorna o valor armazenado anteriormente.

Exemplo

// basic_ios_rdbuf.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
#include <fstream>

int main( )
{
    using namespace std;
    ofstream file( "rdbuf.txt" );
    streambuf *x = cout.rdbuf( file.rdbuf( ) );
    cout << "test" << endl;   // Goes to file
    cout.rdbuf(x);
    cout << "test2" << endl;
}
test2

basic_ios::rdstate

Lê o estado de erro do fluxo.

iostate rdstate() const;

Valor de retorno

As informações de estado de fluxo armazenadas.

Exemplo

// basic_ios_rdstate.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
using namespace std;

void TestFlags( ios& x )
{
    cout << ( x.rdstate( ) & ios::badbit ) << endl;
    cout << ( x.rdstate( ) & ios::failbit ) << endl;
    cout << ( x.rdstate( ) & ios::eofbit ) << endl;
    cout << endl;
}

int main( )
{
    fstream x( "c:\test.txt", ios::out );
    x.clear( );
    TestFlags( x );
    x.clear( ios::badbit | ios::failbit | ios::eofbit );
    TestFlags( x );
}
0
0
0

4
2
1

basic_ios::setstate

Define os sinalizadores de erro de fluxo especificados (atualmente, os sinalizadores de estado de erro de fluxo definidos permanecem inalterados):

flag Descrição
goodbit Nenhum erro
badbit Erro irrecuperável
failbit Falha na operação de E/S, como um erro de formatação ou extração
eofbit O fluxo chegou ao final do arquivo
void setstate(iostate _State);

Parâmetros

_State
Sinalizadores adicionais a serem definidos.

Comentários

A função membro essencialmente chama clear(_ state | rdstate).

Para obter mais informações, consulte clear e rdstate.

Exemplo

// basic_ios_setstate.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
using namespace std;

int main( )
{
    bool b = cout.bad( );
    cout << b << endl;   // Good
    cout.clear( ios::badbit );
    b = cout.bad( );
    // cout.clear( );
    cout << b << endl;   // Is bad, good
    b = cout.fail( );
    cout << b << endl;   // Not failed
    cout.setstate( ios::failbit );
    b = cout.fail( );
    cout.clear( );
    cout << b << endl;   // Is failed, good
    return 0;
}
0
1

basic_ios::set_rdbuf

Atribui um buffer de fluxo para ser o buffer de leitura para esse objeto de fluxo.

void set_rdbuf(
basic_streambuf<Elem, Tr>* strbuf)

Parâmetros

strbuf
O buffer de fluxo para se tornar o buffer de leitura.

Comentários

A função membro protegida armazenará strbuf no ponteiro de buffer de fluxo. Ela não chama clear.

basic_ios::tie

Garante que um fluxo seja processado antes de outro.

basic_ostream<Elem, Traits> *tie() const;
basic_ostream<Elem, Traits> *tie(
basic_ostream<Elem, Traits>* str);

Parâmetros

str
Um fluxo.

Valor de retorno

A primeira função membro retorna o ponteiro de ligação armazenado. A segunda função membro armazena str no ponteiro de ligação e retorna seu valor armazenado anterior.

Comentários

tie faz dois fluxos serem sincronizados de modo que operações em um fluxo ocorram depois da conclusão das operações no outro fluxo.

Exemplo

Neste exemplo, ao vincular cin a cout, garante-se que a cadeia de caracteres Enter a number: vá para o console antes de o número em si ser extraído do cin. Isso elimina a possibilidade de que a cadeia de caracteres "Digite um número:" ainda esteja no buffer quando o número for lido, para termos certeza de que o usuário de fato tem um prompt para responder. Por padrão, cin e cout são ligados.

#include <ios>
#include <iostream>

int main( )
{
    using namespace std;
    int i;
    cin.tie( &cout );
    cout << "Enter a number:";
    cin >> i;
}

basic_ios::traits_type

Um sinônimo para o parâmetro de modelo Traits.

typedef Traits traits_type;

basic_ios::widen

Localiza o char_type equivalente para um determinado char.

char_type widen(char Char) const;

Parâmetros

Char
O caractere a ser convertido.

Valor de retorno

Localiza o char_type equivalente para um determinado char.

Comentários

A função membro retorna use_facet<ctype<E>>(getloc).widen(Char).

Para obter mais informações, consulte use_facet e getloc.

Exemplo

// basic_ios_widen.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
#include <wchar.h>

int main( )
{
    using namespace std;
    char *z = "Hello";
    wchar_t y[2] = {0,0};
    cout << z[0] << endl;
    y[0] = wcout.widen( z[0] );
    wcout << &y[0] << endl;
}

basic_ios::swap

Troca os valores nesse objeto basic_ios por aqueles de outro objeto basic_ios. Porém, os ponteiros para os buffers de fluxo não são trocados.

void swap(basic_ios&& right);

Parâmetros

right
O objeto basic_ios usado para trocar valores.

Comentários

A função membro protegida troca todos os valores armazenados em right por *this, exceto o stream buffer pointer armazenado.

Confira também

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