【问题标题】:What does STL "rdbuf" method name stand for?STL“rdbuf”方法名称代表什么?
【发布时间】:2015-09-24 20:32:39
【问题描述】:

提出以下问题的用户很快就接受了“读取缓冲区”: What does rd stand for in rdstate and rdbuf?

我仍然想知道在“std::ostream”(cout)的上下文中“读取缓冲区”是什么意思。我没有找到任何 STL 文档将这个函数描述为进行任何“阅读”。这只是一个命名错误的函数吗? (......显然,但也许我错过了什么)

【问题讨论】:

  • 这可能仍然是一个谜,但我总是假设它的意思是“读取流缓冲区的地址”。此外,STL 仅指容器、迭代器和算法
  • @Galik 或 原始设备缓冲区
  • iostream 名称选择为失败位。如果 Jerry Schwartz 出现道歉,你会做不同的事情吗?最好让他安静下来。
  • 除了简单的rdbuf 之外,我在 C++ 标准中找不到任何名称来引用它。

标签: c++ stl


【解决方案1】:

我仍然想知道在“std::ostream”(cout)的上下文中“读取缓冲区”是什么意思。

它是“读取”,如“读取值”或“获取值”,而不是“从流中读取”。

这似乎是旧 Cfront 代码中的常见约定,例如请参阅Cfront 2.0 documentation 中描述的任务库,它有几个类似这样命名的函数,例如在第 2-5 页:

int    rdcount();
int    rdmode();
int    rdmax();
void   setmode(int);
void   setmax(int);

所以“rd”和“set”似乎分别用于getter和setter的名称。

这意味着替换streambuf的rdbuf(basic_streambuf<C,T>*)的重载命名错误,它应该是setbuf,但该名称已经被streambuf本身使用,但含义不同。 rdbuf“setter”重载是后来添加的,原始设计只有“getter”,如上面链接的PDF末尾的STRSTREAM(3C++)手册页所示:

class strstream : public strstreambase,  public iostream {
public:
                                 strstream();
                                 strstream(char*, int, int mode);
                 strstreambuf*   rdbuf() ;
                 char*           str();
};

【讨论】:

    【解决方案2】:

    原始设备/数据缓冲区 (rdbuf)

    input_stream 与通常由 string_buffer 或 file_buffer 实例化的 stream_buffer 相关联。

    喜欢: 显式 basic_istream(std::basic_streambuf* sb); 参考:

    https://en.cppreference.com/w/cpp/io/basic_istream/basic_istream

    class basic_streambuf 是原始设备的抽象。这意味着它可以是套接字、文件、命名管道、邮槽、内存、图形卡内存。 那么从高层来看,如何命名不同的设备?

    我认为 RD(原始设备)和原始数据都可以,但原始设备更准确,甚至 99.999% 次它都指向内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 2018-06-01
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多