【问题标题】:Why does async_read in boost asio has const MutableBufferSequence as the second arguments?为什么 boost asio 中的 async_read 将 const MutableBufferSequence 作为第二个参数?
【发布时间】:2018-05-18 16:26:10
【问题描述】:

boost asio 库有 async_read 功能。

    template<
        typename AsyncReadStream,
        typename MutableBufferSequence,
        typename ReadHandler>
    void-or-deduced async_read(
        AsyncReadStream & s,
        const MutableBufferSequence & buffers,
        ReadHandler handler);

该函数用于从流中异步读取一定字节数的数据。结果将放入第二个参数 MutableBufferSequence。常量是什么意思?因为缓冲区即将被修改?

【问题讨论】:

  • 这样你就可以传递任何模拟 MutableBufferSequence 概念的东西。这意味着您可以使用任何兼容的可变缓冲区序列。
  • 哦。常量部分。 MutableBufferSequence 就像一个参考。引用未修改。

标签: c++ boost constants


【解决方案1】:

MutableBufferSequenceMutableBuffers 的容器。 MutableBuffer 是对可变内存的固定长度区域的引用。请注意,它本身并不包含内存。

在调用期间,MutableBufferSequence 被复制(可能不止一次)并存储在异步操作中。

请注意,唯一被复制的是对可变内存区域的引用,而不是内存本身。

【讨论】:

  • 你的意思是在调用过程中,缓冲区没有被修改。它的引用被复制到异步操作。当数据准备好时,内存区域将被修改。但这发生在函数生命周期之后。
  • 容器没有被修改。这意味着缓冲区的 count 不能改变。即使通过const 引用,也可以(显然)修改元素。这意味着 content 可以改变
  • 缓冲区有引用语义,很像string_viewreference_wrapper。就像您可以改变 int * const 指向的 int 一样,您可以通过引用的 const 副本改变“指向”的缓冲区。 (是const的引用,不是指向的类型)
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多