2013-10-02 7 views
5

Ich habe festgestellt, es gibt zwei Möglichkeiten, setf()/unsetf() für den Iostream, das ist (1) ios und (2) ios_base.ios und ios_base Klasse für Stream-Formatierung

#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; 
} 

Was ist der Unterschied von ihnen, wenn ich das Format der Ostream ändern möchte;

Welche verwenden Sie normalerweise beim Ändern des Formats?

Antwort

6

Die Konstanten werden tatsächlich in std::ios_base aber std::ios (eigentlich std::basic_ios<cT, Traits>) definiert von std::ios_base abgeleitet ist. Somit können alle in std::ios_base definierten Mitglieder unter Verwendung von std::ios erreicht werden.

Die Klasse std::ios_base enthält alle Member, die völlig unabhängig vom Template-Parameter des Streams sind. std::basic_ios<cT, Traits> leitet sich von std::ios_base ab und definiert alle Elemente, die zwischen Eingabe- und Ausgabeströmen gemeinsam sind.

+1

Vielen Dank für Ihre Antwort. Empfiehlst du in deiner Antwort "ios" und nicht "ios_base"? – sevenOfNine

+2

Die meiste Zeit verwende ich 'std :: ios_base' für die tatsächlich in' std :: ios_base' definierten Member: Auf diese Weise muss jeder, der die Definition nachschlägt, die Dokumentation nicht finden, indem er die Vererbungskette hochgeht. –

+0

Nochmals vielen Dank. Ich sehe, dass Sie für die in std :: ios_base definierten Mitglieder ios_base verwenden. – sevenOfNine

Verwandte Themen