从参数和范围返回
Return from parameter and scope
我有一个函数,我想从函数中检索字符串并返回错误代码:
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);
}
相关文章:
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 从函数返回范围视图时,带有std::span:中间对象所有权的C++Ranges-v3
- 通过引用返回的变量的范围
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- 是否未定义将对函数范围变量的引用作为值返回
- 我们如何在范围消失时通过引用返回变量
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 基于范围的 for 循环,用于包含C++中的指针的自定义链表,仅返回对象
- 为什么此范围基于语句返回一个数字太低的范围
- 范围分辨率运算符在类型:: var的情况下返回什么
- C++. 面试. 关于返回 int* 值问题的范围
- 为什么在.h中定义的私有结构需要.cpp文件中的返回类型中的范围
- 函数返回本地变量,尽管变量不超出范围,没有编译器问题,并且代码执行
- 优化的范围检查并返回值
- 为什么对象在作为指针传递时超出范围,而在返回时则不然
- 变量循环范围会导致返回局部变量的地址引用
- 从排序的数字数组中返回数字范围的最快方法是什么?
- 如何检查copy_if是否返回使用ostream_iterator范围内的任何内容
- 具有抽象基类的工厂模式 - 按引用或按值返回?范围界定和切片问题