2012-12-01 37 views
4

我想知道如果std :: endl與std :: cout和std :: wcout一起工作?std :: endl與cout和wcout一起工作嗎?

任何人都明白這一點?

+0

如何編寫代碼來測試它? – asheeshr

+0

我認爲他的意思是問他用wcout使用endl是否有什麼問題。 – ctor

+0

我添加了一些更詳細的解釋操縱器如何工作。 –

回答

9

是的。實際上,std::endl是一個函數模板,它將作爲std::basic_ostream模板的任何專門化操作符。


一些更詳細地:27.7.3.6規定,所述std::basic_ostream模板包含過載operator<<如下:

basic_ostream<charT, traits> & 
operator<<(basic_ostream<charT, traits> (*pf)(basic_ostream<charT, traits> &)); 

在合適的函數調用此過載的效果是return pf(*this)。所以當你說std::cout << std::endl時,這實際上變成std::endl(std::cout)並且返回對流對象的引用。

所有其他的ostream操縱器都以相同的方式編寫,對於輸入操縱器也是如此。


endl功能模板的魔術是widen('\n')一個呼叫,它產生正確的「換行符」數據爲給定的字符類型。