Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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++ 从参数和范围返回_C++_Parameters_Scope_Error Code - Fatal编程技术网

C++ 从参数和范围返回

C++ 从参数和范围返回,c++,parameters,scope,error-code,C++,Parameters,Scope,Error Code,我有一个函数,我想从函数中检索字符串并返回错误代码: int Connection::RecvMsg(std::string* buffer) { buffer = &RecvBuffer.front(); RecvBuffer.pop(); return error_state; } 我想从RecvBuffer中弹出一个字符串,我想通过参数传递字符串tb 我意识到缓冲区在弹出后将无效。是在该函数中声明静态字符串的唯一方法吗?我有什么更好的办法吗?我想你可能想要这样的东西

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

int Connection::RecvMsg(std::string* buffer)
{
  buffer = &RecvBuffer.front();
  RecvBuffer.pop();
  return error_state; 
}
我想从
RecvBuffer
中弹出一个字符串,我想通过参数传递字符串tb


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

我想你可能想要这样的东西:

*buffer = RecvBuffer.front();

将将字符串分配给任何<代码>缓冲区指向.< /P> < P>。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; 
}

输出参数不是建模多个参数的唯一选择(IMO也不是最佳选择)。相反,我建议以
对的形式返回这两个值:

#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);
}
#包括
#包括
std::pair Connection::RecvMsg(){
if(recvBuffer.empty()){
返回std::make_pair(std::string(),错误代码);
}
std::string const front=recvBuffer.front();
recvBuffer.pop();
返回std::生成\u对(正面,无\u错误);
}

您可以std::将RecvBuffer.front()的内容移动到buffer指向的字符串中,然后毫无顾虑地弹出。啊,操作!不知怎的,我忘记了去引用它并复制它。谢谢啊,对。最初,我通过引用传递,得到了第一个示例。但这不是在分配地址吗?-编辑操作,我只记得引用变量的规则。是的,那是一份复印件。