在c++中使用错误码的更好方法是什么?
What is the better way to use an error code in C++?
我是使用c++11的项目的成员。我不确定何时应该为返回值使用错误代码。我发现c++中的RVO工作得很好,即使直接返回字符串和结构体数据。但是如果我使用返回码,我就不能得到RVO的好处,而且代码有点冗余。
所以每次我声明function时,我都不能决定应该用哪个作为返回值。我应该如何保持代码的一致性?任何建议都会对我有帮助。
// return string
MyError getString(string& out);
string getString();
// return struct
MyError getStructData(MyStruct& out);
MyStruct getStructData();
通常,在c++中使用异常而不是错误代码是首选的替代方案。这有几个原因:
- 正如您已经观察到的,使用错误代码作为返回值可以阻止您使用更"自然"的返回值
- 全局错误码,不是线程安全的,有几个其他问题
- 错误码可以忽略,异常不能
- 必须在每个可能失败的函数调用之后评估错误代码,因此您必须在代码中添加错误处理逻辑
- 异常可以被抛出并在调用堆栈中向上传递几层而不需要额外的处理
当然,在某些环境中异常是不可用的,通常是由于平台的限制,例如在嵌入式编程中。在这些情况下,错误码是唯一的选择。
但是,如果您使用错误代码,请与传递它们的方式保持一致。我见过的最吸引人的不占用返回值位置并且仍然是线程安全的错误代码用法是在每个函数中传递对上下文对象的引用。上下文对象将具有全局或每个线程的信息,包括最后一个函数的错误代码。
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 编写按初始值循环的循环的更好方法是什么
- 用 c++ 为游戏制作"bullet"的更好方法?
- 在CMakeLists中包含目录的更好方法.txt
- 将QDomDocument数据用作文本的更好方法
- C++ - 创建具有相同字符的特定大小的以 null 结尾的 c 样式字符串的更好方法
- 在 sqlite3 中批量插入的更好方法C++
- 设计许多单例代码结构的更好方法
- 使用继承的类模板避免公共成员不可见和源代码膨胀/重复的更好方法
- 在初始化列表中初始化数组的更好方法
- 将对象从一个 std::d eque 移动到另一个的更好方法
- 请告诉我在巴泽尔拥有多平台工作空间的更好方法
- 构造具有大量数据的对象的更好方法(C++)
- 从2D矢量中找出最小尺寸的向量元素的更好方法
- 在C++中创建不可变对象的更好方法
- 在构造函数中组织初始值设定项列表的更好方法
- std::copy with return values - 防止"expression: string iterators incompatible"的更好方法?
- 删除数组成员的更好方法是什么?
- 在C 中操作数据的更好方法是什么