2014-02-27 107 views

回答

49

std::endl不是一個換行常數。這是一個操縱器其中,另外來插入一個換行符,還有轉儲這個流。

如果只是要添加一個換行符,你應該只需插入'\n'。如果你只是想添加一個標籤,你只需插入一個'\t'。沒有std::tab或任何東西,因爲插入一個標籤加上衝刷流不是一個普通的操作。

+4

@Ksletmo,'endl'插入的序列總是''\ n'';它與該平臺的首選文本文件行結尾無關。 –

+3

換句話說:換行符「\ n」是一個標準的ASCII字符,就像''\ t''一樣。將單個字符「\ n」寫入以文本模式打開的文件的效果因平臺而異。正如Rob所說,這與'std :: endl'沒有關係,它只是寫入一個字符並進行刷新。它不知道或不在乎流與該角色有什麼關係。 –

3

只有std::ends(插入空字符)和std::flush(刷新流)輸出操縱器除了在ostream的std::endl包括文件。

您可以在ios和iomanip包含文件中找到其他人。全部清單是here

3

實際上,這是不需要的。

由於endl首先執行插入換行符\n的同樣工作,然後也刷新緩衝區。在流上插入\t不需要刷新後。

5

如果要自己添加的功能,它應該是這樣的:

#include <iostream> 

namespace std { 
    template <typename _CharT, typename _Traits> 
    inline basic_ostream<_CharT, _Traits> & 
    tab(basic_ostream<_CharT, _Traits> &__os) { 
    return __os.put(__os.widen('\t')); 
    } 
} 

int main() { 

    std::cout << "hello" << std::endl; 
    std::cout << std::tab << "world" << std::endl; 
} 

我不建議這樣做,但我想補充的完整性的解決方案。

相關問題