Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost.asio.detail.read\u op是什么意思?_C++_Boost_Boost Asio - Fatal编程技术网

C++ boost.asio.detail.read\u op是什么意思?

C++ boost.asio.detail.read\u op是什么意思?,c++,boost,boost-asio,C++,Boost,Boost Asio,我阅读了boost.1.50源代码中的asio,该方法的意义是什么 void operator()(const boost::system::error_code& ec, std::size_t bytes_transferred, int start = 0) { switch (start) { case 1: buffers_.prepare(this->check_for_completion(ec, total_transferred_)

我阅读了boost.1.50源代码中的asio,该方法的意义是什么

void operator()(const boost::system::error_code& ec,
    std::size_t bytes_transferred, int start = 0)
{
  switch (start)
  {
    case 1:
    buffers_.prepare(this->check_for_completion(ec, total_transferred_));
    for (;;)
    {
      stream_.async_read_some(buffers_,
          BOOST_ASIO_MOVE_CAST(read_op)(*this));
      return; default:
      total_transferred_ += bytes_transferred;
      buffers_.consume(bytes_transferred);
      buffers_.prepare(this->check_for_completion(ec, total_transferred_));
      if ((!ec && bytes_transferred == 0)
          || buffers_.begin() == buffers_.end())
        break;
    }

    handler_(ec, static_cast<const std::size_t&>(total_transferred_));
  }
}
void操作符(),
std::大小\u t字节\u传输,int开始=0)
{
开关(启动)
{
案例1:
缓冲区准备(此->检查是否完成(ec,总转移量);
对于(;;)
{
流异步读取一些(缓冲区),
推进移动(阅读操作)(*此));
返回;默认值:
传输的总字节数=传输的字节数;
缓冲区消耗(传输的字节);
缓冲区准备(此->检查是否完成(ec,总转移量);
如果(!ec&&bytes_transfer==0)
||缓冲区\开始()==缓冲区\结束()
打破
}
处理程序(ec,静态施法(总转移量));
}
}
代码是从boost\u 1\u 50\u 0\boost\asio\impl\read.hpp获取的。
开关大小写样式看起来很奇怪,“return;default:”?

这是一个管理组合读取操作的函子

当第一次调用(
start==1
)时,它准备缓冲区,发出第一次读取,将自身作为完成处理程序传递,然后返回

现在,每次作为完成处理程序调用时,它都会直接跳到
default
标签,更新缓冲区和内部计数器,并在需要时发出另一次读取


实际上,可以将此运算符拆分为两个单独的运算符:一个用于初始读取,另一个用于后续调用。但这种方法可能会生成更多代码,因此被库作者拒绝。

这是一个管理组合读取操作的函子

当第一次调用(
start==1
)时,它准备缓冲区,发出第一次读取,将自身作为完成处理程序传递,然后返回

现在,每次作为完成处理程序调用时,它都会直接跳到
default
标签,更新缓冲区和内部计数器,并在需要时发出另一次读取


实际上,可以将此运算符拆分为两个单独的运算符:一个用于初始读取,另一个用于后续调用。但是这种方法可能会生成更多的代码,因此被库作者拒绝。

谢谢,我认为“默认”应该在新的case标签中。也许我不理解switch casegrammar@billow
默认值
本身是一个大小写“标签”。但是标准不允许将其放入
for
循环中。请尝试以下代码:#include int main(){int i=2;switch(i){case 1:std::cout谢谢,我认为“default”应该在新的case标签中。也许我不理解switch的大小写grammar@billow
默认值
本身是一个大小写“标签”.但标准不允许将其放入
for
循环中。请尝试以下代码:#include int main(){int i=2;switch(i){case 1:std::cout