我有一个函数,我想从函数中检索字符串并返回错误代码:
int Connection::RecvMsg(std::string* buffer)
{
buffer = &RecvBuffer.front();
RecvBuffer.pop();
return error_state;
}
我想从中弹出一个字符串RecvBuffer
,并且我想通过参数传递字符串。
我意识到弹出后缓冲区无效。是在该函数中声明静态字符串的唯一方法吗?我应该采取什么更好的方法吗?
我有一个函数,我想从函数中检索字符串并返回错误代码:
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 也不是最好的选择)。相反,我建议在 a 中返回两个值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);
}