定义于头文件 <ostream>
template< class CharT, |
类模板 basic_ostream
提供字符流上的高层输出操作。受支持操作包含有格式输出(例如整数值)和无格式输出(例如生字符和字符数组)。此功能以 basic_streambuf
类所提供的接口实现,通过 basic_ios
基类访问。典型的实现中, basic_ostream
无非继承的数据成员。
无格式输出
插入字符
std::basic_ostream<CharT,Traits>::put
表现为无格式输出函数 (UnformattedOutputFunction) 。构造并检查 sentry 对象后,写字符 ch
到输出流。
若输出因任何原因失败,则设置 badbit
。
参数
ch | - | 要写入的字符 |
返回值
*this
注意
此函数不对 signed char 或 unsigned char 类型重载,不同于有格式的 operator<< 。
不同于有格式输出函数,若输出失败,则此函数不设置 failbit
。
调用示例
#include <fstream>
#include <iostream>
int main()
{
std::cout.put('a'); // 正常用法
std::cout.put('\n');
std::ofstream s("/does/not/exist/");
s.clear(); // 假装流是好的
std::cout << "Unformatted output: ";
s.put('c'); // 这将设置 badbit ,但非 failbit
std::cout << " fail=" << bool(s.rdstate() & s.failbit);
std::cout << " bad=" << s.bad() << '\n';
s.clear();
std::cout << "Formatted output: ";
s << 'c'; // 这将设置 badbit 和 failbit
std::cout << " fail=" << bool(s.rdstate() & s.failbit);
std::cout << " bad=" << s.bad() << '\n';
}
输出
插入字符块
std::basic_ostream<CharT,Traits>::write
basic_ostream& write( const char_type* s, std::streamsize count ); |
表现为无格式输出函数 (UnformattedOutputFunction) 。构造并检查 sentry 对象后,输出来自首元素为 s
所指向的字符数组中的相继位置的字符。插入字符到输出序列,直至出现下列条件之一:
- 准确插入了
count
个字符 - 插入到输出序列失败(该情况下调用 setstate(badbit) )
参数
s | - | 指向要写入的字符串的指针 |
count | - | 要写入的字符数 |
返回值
*this
异常
若出现错误(错误状态标志不是 goodbit )并且设置了 exceptions() 为对该状态抛出则为 failure 。
若内部操作抛出异常,则捕获它并设置 badbit 。若对 badbit
设置了 exceptions() ,则重抛该异常。
注意
此函数不为 signed char 或 unsigned char 类型重载,不同于有格式的 operator<< 。
而且,不同于有格式输出函数,此函数在失败时不设置 failbit
。
使用非转换本地环境(默认本地环境为非转换)时, std::basic_ofstream 中此函数的覆写者可为零复制大块 I/O 优化(通过覆写 std::streambuf::xsputn )。
调用示例
#include <iostream>
int main()
{
int n = 0x41424344;
std::cout.write(reinterpret_cast<char*>(&n), sizeof n) << std::endl;
char c[] = "This is sample text.";
std::cout.write(c, 4) << std::endl;
}
输出