【问题标题】:Advantages of std::error_code/error_condition over errno?std::error_code/error_condition 优于 errno 的优势?
【发布时间】:2017-05-28 20:36:40
【问题描述】:

在自学编程几年后,我即将创建我的第一个真正的 C++ 应用程序(一个 2D 游戏)。我遇到的问题是很多时候教程经常跳过正确的错误处理技术(或做最低限度的)。为了尝试了解错误处理的工作原理,我首先尝试了解 C 错误代码和errno 及其优缺点。在此之后,我查看了 C++11 的 std::error_code/std::error_condition,但我无法理解它们的重要性以及对 errno 之类的改进。究竟是什么让std::error_codeerrno 有所改进?

【问题讨论】:

  • 请注意:您是否已经在使用异常?
  • 由于可能的运行时开销和我的单线程游戏对性能的需求,我试图避开它们。
  • std::error_code 更安全。
  • “由于可能的运行时开销,我试图回避它们” - 与检查每个函数的返回值的明确运行时开销相比?
  • @Jason 关于例外的底线:它们在任何一种你会在第一场比赛中担心的方式上都不会太贵。 “手动内存管理”部分让我相信你已经被不了解 C++ 的庸医警告过,因为我们手动管理我们的内存。只要您正确使用智能指针和 RAII,基本的异常安全(无资源泄漏)就内置在语言中。您可能根本不需要游戏的强大异常安全性。

标签: c++ error-handling errno


【解决方案1】:

std::error_code 可以包装 errno 并进行额外改进,您可以将其转换为您自己的错误。

看看https://www.youtube.com/watch?v=w7ZVbw2X-tE,我相信你会更了解error_code。

关于例外情况,请确保正确对待它们。在嵌入式系统中,您通常无法承受异常情况,因为您不知道多少它们会花费多少时间并且它们会占用更多空间。然而,在游戏中,AAA 游戏公司确实不使用异常,但他们编写了自己的特殊容器来做到这一点(参见例如 EASTL 和 WG21-SG14 库和讨论)。 如果您正在编写您的第一个游戏,请使用标准方法,包括例外,因为您将无法编写自己的东西。如果抛出异常而您没有捕获它,您的程序将终止并继续学习。

确保自学如何编写现代 C++,至少使用 C++14 和提供的功能,这将减少你的内存安全和脱发问题;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 2013-09-11
    • 2012-09-20
    • 1970-01-01
    • 2014-03-06
    • 2020-11-23
    • 2010-11-15
    • 2012-04-20
    相关资源
    最近更新 更多