C++ endl的实质
直接看源码:endl是一个模板函数,接收一个ostream输出流参数。
endl:换行+刷新缓冲区。把缓冲区数据写入
ends:空字符(’\0’)标记结束。不同的操作系统对’\0’处理的方式也不同,有的输出一个空格,有的什么都没有。
flush:刷新缓冲区
template <class _Elem, class _Traits>
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;
}
template <class _Elem, class _Traits>
basic_ostream<_Elem, _Traits>& __CLRCALL_OR_CDECL ends(basic_ostream<_Elem, _Traits>& _Ostr) { // insert null character
_Ostr.put(_Elem());
return _Ostr;
}
template <class _Elem, class _Traits>
basic_ostream<_Elem, _Traits>& __CLRCALL_OR_CDECL flush(basic_ostream<_Elem, _Traits>& _Ostr) { // flush stream
_Ostr.flush();
return _Ostr;
}
应尽量使用cout << ‘\n’,endl会刷新输出流,会降低执行效率。