【问题标题】:Can I cause an exception in C++ if I lose data on a cast?如果我在演员表中丢失数据,我会在 C++ 中引发异常吗?
【发布时间】:2014-08-12 04:58:41
【问题描述】:

我正在开发一个遗留的 C 产品,它有大量的转换和潜在的数据丢失 - 从 int 转换为 short 类型的东西。在 Visual Studio 中,如果发生这种数据丢失,是否有办法导致异常,或者我是否需要用断言填充我的代码?

【问题讨论】:

  • 为了避免类型转换中的数据丢失,您可以使用 SafeInt 库。请查看以下链接 - msdn.microsoft.com/en-ca/library/dd570023.aspx
  • @Naseef:这些功能不会防止数据丢失,它们会抱怨数据丢失。但这是一个正确的答案。

标签: c++ visual-studio exception


【解决方案1】:

C++ 没有支持在有损转换时抛出异常的语言特性。如果您使用大括号初始化,从 C++11 开始,编译器需要让您了解可能缩小的转换,但这并不意味着转换在 在实践中(即在运行时)正在缩小)。

此类问题的最佳解决方案是编写自己的库来执行此操作,或者使用已经存在的库,例如 SafeInt

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2021-08-07
    • 2014-04-14
    • 1970-01-01
    相关资源
    最近更新 更多