2013-10-02 16 views
5

Ho trovato che ci sono due modi per setf()/unsetf() per lo iostream, ovvero (1) ios e (2) ios_base.classe ios e ios_base per la formattazione dello stream

#include <iostream> 
using namespace std; 

int main() { 
    cout.width(5); 
    cout << 123 << endl; 

    cout.setf(ios::adjustfield); // (1) using ios:: 
    cout << 123 << endl; 

    cout.width(5); 
    cout << 456 << endl; 

    cout.setf(ios_base::adjustfield); // (2) using ios_base:: 
    cout << 456 << endl; 

    return 0; 
} 

Qual è la differenza tra di loro quando desidero modificare il formato dell'ostream;

Quali usi normalmente per modificare il formato?

risposta

6

Le costanti sono effettivamente definite in std::ios_base ma std::ios (beh, in realtà std::basic_ios<cT, Traits>) è derivato da std::ios_base. Pertanto, è possibile accedere a tutti i membri definiti in std::ios_base utilizzando std::ios.

La classe std::ios_base contiene tutti i membri completamente indipendenti dal parametro del modello del flusso. std::basic_ios<cT, Traits> deriva da std::ios_base e definisce tutti i membri comuni tra i flussi di input e di output.

+1

Grazie per la risposta. Nella tua risposta, consigli di usare "ios" e "ios_base"? – sevenOfNine

+2

La maggior parte delle volte sto usando 'std :: ios_base' per i membri effettivamente definiti in' std :: ios_base': in questo modo chiunque cerchi la definizione non deve trovare la documentazione risalendo la catena di ereditarietà. –

+0

Grazie ancora. Vedo che per i membri definiti in std :: ios_base, usi ios_base. – sevenOfNine

Problemi correlati