2014-02-27 142 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; 
} 

我不建议这样做,但我想补充的完整性的解决方案。

相关问题