从参数和范围返回

Return from parameter and scope

本文关键字:返回 范围 参数      更新时间:2023-10-16

我有一个函数,我想从函数中检索字符串并返回错误代码:

int Connection::RecvMsg(std::string* buffer)
{
  buffer = &RecvBuffer.front();
  RecvBuffer.pop();
  return error_state; 
}

我想从RecvBuffer弹出一个字符串,我想通过参数传递字符串。

我意识到弹出后缓冲区将无效。在该函数中声明静态字符串的唯一方法是吗?我应该有更好的方法吗?

我想

你可能想要更多这样的东西:

*buffer = RecvBuffer.front();

这会将字符串分配给buffer指向的任何内容。

在C++中传播错误的推荐方法是使用异常机制。

如果出于某种原因不想使用异常,则可以使用引用将信息传递回调用方。

int Connection::RecvMsg(std::string &buffer)
{
    buffer = RecvBuffer.front();
    RecvBuffer.pop();
    return error_state; 
}

当然,您也可以使用指针,但在这种情况下,最好确保调用方没有传递 nullptr。所以你需要写这样的东西

int Connection::RecvMsg(std::string *buffer)
{
    error_state = false;
    if(buffer != nullptr)
    {
        *buffer = RecvBuffer.front();
        RecvBuffer.pop();
        error_state = true;
    }
    return error_state; 
}

Outparameters并不是对多个参数进行建模的唯一(IMO也不是最好的)选择。相反,我建议在pair中返回这两个值:

#include <utility>
#include <string>
std::pair<std::string,int> Connection::RecvMsg() {
  if (recvBuffer.empty()) {
    return std::make_pair<std::string,int>(std::string(),error_code);
  }
  std::string const front = recvBuffer.front();
  recvBuffer.pop();
  return std::make_pair<std::string,int>(front,no_error);
}