c++11 标准模板(STL)(std::basic_ostream)(五)

定义于头文件 <ostream>
template<

    class CharT,
    class Traits = std::char_traits<CharT>

> class basic_ostream : virtual public std::basic_ios<CharT, Traits>

类模板 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;
}

输出

猜你喜欢

转载自blog.csdn.net/qq_40788199/article/details/131489865
今日推荐