2013-10-02 13 views
5

iostream için f()/unsetf() değerini ayarlamanın iki yolu vardır, yani (1) ios ve (2) ios_base.ios ve akış biçimlendirmesi için ios_base sınıfı

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

Orijin biçimini değiştirmek istediğimde bunların arasındaki fark nedir;

Biçimi değiştirirken normalde hangisini kullanıyorsunuz?

cevap

6

Sabitler aslında std::ios_base içinde tanımlanmıştır, ancak std::ios (aslında, std::basic_ios<cT, Traits>) std::ios_base türetilmiştir. Böylece, std::ios_base'da tanımlanan tüm üyelere std::ios kullanılarak erişilebilir.

std::ios_base sınıfı, akışın şablon parametresinden tamamen bağımsız olan tüm üyeleri içerir. std::basic_ios<cT, Traits>, std::ios_base'dan gelir ve giriş ve çıkış akışları arasında yaygın olan tüm üyeleri tanımlar.

+1

Cevabınız için teşekkür ederiz. Cevabınızda, "ios_base" değil "ios" kullanılmasını öneriyor musunuz? – sevenOfNine

+2

Çoğu zaman std :: ios_base' içinde tanımlanmış üyeler için std :: ios_base' kullanıyorum: bu şekilde tanımı arayan herkes belgeyi miras zincirinden yürüyerek bulmak zorunda değil. –

+0

Tekrar teşekkürler. Ben std :: ios_base tanımlanan üyeler için ios_base kullanın. – sevenOfNine

İlgili konular