public member function
<ostream> <iostream>

std::basic_ostream::put

basic_ostream& put (char_type c);
放置字符
将字符 c 插入流。

在内部,该函数首先构造一个 sentry 对象来访问输出序列。然后(如果 good),它会像调用其成员函数 sputc 一样将 c 插入其关联的 *流缓冲区* 对象,最后在返回前销毁 sentry 对象。

参数

c
要写入的字符。
成员类型 char_type 是流使用的字符类型(即其第一个类模板参数 charT)。

返回值

basic_ostream 对象(*this)。

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

如果操作设置了通过成员 exceptions 注册的 *内部状态标志*,则该函数将引发一个成员类型为 failure 的异常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// typewriter
#include <iostream>     // std::cin, std::cout
#include <fstream>      // std::ofstream

int main () {
  std::ofstream outfile ("test.txt");
  char ch;

  std::cout << "Type some text (type a dot to finish):\n";
  do {
    ch = std::cin.get();
    outfile.put(ch);
  } while (ch!='.');

  return 0;
}

此示例将用户键入的所有内容写入文件,直到键入句点 (.) 为止。

数据竞争

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

异常安全

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

另见