2011-01-11 38 views
2

任何人都可以解釋我的setw操縱器的聲明?試圖理解它我完全被吹掉了。 iomanip中的setw的聲明如下爲什麼cout返回smanip?

smanip setw(int) 

現在什麼是smanip?當我們給的std ::法院< <運輸及工務局局長會發生什麼(10)< <「海」 [我想知道的輸出實際上是如何受運輸及工務局局長,換句話說行動引擎蓋下發生)

回答

4

smanip是一個實現定義的類型。只要工作完成,圖書館可以將其定義或類型化爲任何喜歡的東西。

實際上,它將是某種結構,它表示(a)要執行的操作,以及(b)要在此操作中使用的參數10。它可能還有一個函數來執行操作,或者它可能不會,這取決於實現如何定義operator<<(ostream &, smanip)或某些類似的重載以捕獲必要的操作數類型。我沒有檢查我的實現以找出答案。

至於如何影響輸出:my_stream << setw(10)被定義爲在調用my_stream.width(10)時對流具有相同的效果。因此,重載將確保以某種實現特定的方式發生。非參數化流操縱器的操作符過載被專門定義爲調用操縱器,但是與smanip相比,實現有更多的自由度。

+0

void Function1 {std :: cout.width(10);的std :: cout.fill( '*'); } int main(){Function1();性病::法院<<「海」;返回0;}從上面的代碼片段我可以觀察到操縱器具有函數範圍!這是否也是實現特定的? – 2011-01-11 16:04:52

0

setw(int)通過本身不會修改任何東西。它只是返回一個流操縱符(smanip),可以用來修改流的行爲。

// setw example 
#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() { 
    cout << setw (10); 
    cout << 77 << endl; 
    return 0; 
} 
+0

是的,但是你知道它是如何影響的嗎?換句話說,smanip似乎是一個模板化的類,但是衰落是smanip setw(int)。不應該是smanip setw(int)或類似的東西? – 2011-01-11 15:22:22