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会刷新输出流,会降低执行效率。

posted @ 2022-05-11 11:11  天下太平  阅读(118)  评论(0编辑  收藏  举报