【问题标题】:Whether to use exceptions in C++ for Socket library?是否在 C++ 中为 Socket 库使用异常?
【发布时间】:2015-06-01 09:22:23
【问题描述】:

我打算用 C++ 编程语言构建一个可移植的 Socket 库。众所周知,网络编程中经常出现错误。其中一些是可恢复的,而另一些则不是。我计划在 C++ 中使用异常来跟踪异常,进行一些日志记录操作并通知最终用户。但是使用异常是非常困难的,使用错误代码等经典技术会导致代码难以阅读(大量的if 语句)。那么你的偏好是什么?

顺便问一下,有没有轻量级的socket库(欢迎教育目的,像Ace这样的东西真的很难理解)?

【问题讨论】:

  • 针对多个平台的库代码最好在没有 C++ 异常的情况下编写。跨平台的异常支持有很大不同。如果客户希望在库核心之上实现异常模型,他们可以轻松编写包装器。
  • 我希望这主要是基于意见的。

标签: c++ sockets exception


【解决方案1】:

使用返回码的缺点是人们忘记了错误处理。例外情况不会发生这种情况。但是,如果您编写一个在其析构函数中断言的返回代码类,除非返回值被读取或显式忽略,您可以获得返回值的可移植性和性能,而不会出现错误处理不佳的缺点。如果调用者需要处理异常,您仍然需要手动转发错误代码。

【讨论】:

    【解决方案2】:

    这个问题的答案归结为您希望在哪里以及如何处理错误情况。

    异常处理在解析器中真正发挥作用时,需要从一些深度嵌套的代码返回,然后才能处理错误。检查错误代码将是一个无用的负担。

    IO 可能略有不同,因为至少在某种程度上接近故障点来处理错误是有意义的。如果允许错误向上传播,则会丢失上下文并使错误处理无效。

    无论您决定做什么,始终记录故障点,以便您以后可以正确调试它。异常往往会隐藏故障点并使调试变得非常困难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 2015-02-14
      • 2010-11-27
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多