C++中换行符/n与endl有什么区别?
1个回答
展开全部
endl是一个特殊值,称为操纵符,将它写入输出流时,不仅具有输出换行的效果,而且它刷新与设备关联的缓冲区,通过刷新缓冲区,用户可立即看到写入到流中的输出。
\n仅仅是一个换行符,将它写入到输出流时,只能起到一个换行的作用,不能刷新输出。
因此建议,在能用cout<<endl;的形式时不要用cout<<"\n"形式。
程序员经常在调试过程中插入输出语句,这些语句都应该刷新输出流。忘记刷新输出流可能会造成输出信息停留在缓冲区,如果程序崩溃,将会导致对程序崩溃位置的错误判断。
自己在写C++的时候一直在用endl作为换行,突然想起了写C时候的'\n'。
想知道这两都的区别,看了下include目录下的ostream文件,里面这样说的:
template<class
_Elem,
class
_Traits>
inline
basic_ostream<_Elem,
_Traits>&
__CLRCALL_OR_CDECL
endl(basic_ostream<_Elem,
_Traits>&
_Ostr)
{
//
insert
newline
and
flush
stream
_Ostr.put(_Ostr.widen('\n'));
_Ostr.flush();
return
(_Ostr);
}
\n仅仅是一个换行符,将它写入到输出流时,只能起到一个换行的作用,不能刷新输出。
因此建议,在能用cout<<endl;的形式时不要用cout<<"\n"形式。
程序员经常在调试过程中插入输出语句,这些语句都应该刷新输出流。忘记刷新输出流可能会造成输出信息停留在缓冲区,如果程序崩溃,将会导致对程序崩溃位置的错误判断。
自己在写C++的时候一直在用endl作为换行,突然想起了写C时候的'\n'。
想知道这两都的区别,看了下include目录下的ostream文件,里面这样说的:
template<class
_Elem,
class
_Traits>
inline
basic_ostream<_Elem,
_Traits>&
__CLRCALL_OR_CDECL
endl(basic_ostream<_Elem,
_Traits>&
_Ostr)
{
//
insert
newline
and
flush
stream
_Ostr.put(_Ostr.widen('\n'));
_Ostr.flush();
return
(_Ostr);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询