函数
<ostream> <iostream>

std::endl

用于 ostream
ostream& endl (ostream& os);
基础模板
template <class charT, class traits>basic_ostream<charT,traits>& endl (basic_ostream<charT,traits>& os);
插入换行符并刷新流
插入一个换行符并刷新流。

其行为等同于调用 os.put('\n')(对于 char 类型以外的其他字符类型,则为 os.put(os.widen('\n'))),然后调用 os.flush()

参数

os
受影响的输出流对象。
由于此函数是操作符,因此它设计为可以单独使用,不带参数,并与输出流的插入<<)操作结合使用(请参见下面的示例)。

返回值

参数 os

通过修改 os内部状态标志来发出错误信号。
flagerror
eofbit-
failbit如果 sentry 对象的构造失败,则可能设置此标志。
badbit流上的插入(或同步)失败,或者发生了其他错误(例如,当此函数捕获了内部操作抛出的异常时)。
当设置时,流的完整性可能受到影响。
单个操作可能在 os 上设置多个标志。

如果该操作设置了 os内部状态标志,该标志已通过其成员 exceptions 注册,则该函数将抛出类型为 ios_base::failure 的异常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// endl example
#include <iostream>     // std::cout, std::end

int main () {

  int a=100;
  double b=3.14;

  std::cout << a;
  std::cout << std::endl;              // manipulator inserted alone
  std::cout << b << std::endl << a*b;  // manipulator in concatenated insertion
  std::endl (std::cout);               // endl called as a regular function

  return 0;
}

输出

100
3.14
314


数据竞争

修改 os
并发访问同一流对象可能导致数据竞争,但标准流对象(coutcerrclogwcoutwcerrwclog)在与 stdio 同步时除外(在这种情况下,不会引发数据竞争,尽管无法保证来自多个线程的字符插入顺序)。

异常安全

基本保证:如果抛出异常,os 处于有效状态。
如果 os 的结果错误状态标志不是 goodbit 并且 exceptions 成员被设置为针对该状态抛出,则此函数将抛出成员类型为 failure 的异常。
内部操作抛出的任何异常都会被此函数捕获并处理,从而设置 osbadbit。如果在对 osexceptions 的最后一次调用时设置了 badbit,则此函数将重新抛出捕获到的异常。

另见