【问题标题】:Is there an alternative to suppressing warnings for unreachable code in the xtree?是否有替代方法来抑制 xtree 中无法访问代码的警告?
【发布时间】:2010-07-12 22:07:44
【问题描述】:

将 std::map 与使用普通、非抛出、复制构造函数的类型一起使用时,对于 xtree 中无法访问的代码,将抛出编译器警告/错误(警告级别 4,发布模式)。这是因为 std::map 中有一个 try-catch,它有助于在发生异常时维护树的状态,但是编译器发现如果存储的元素不调用 catch 语句,则永远不会调用扔。使用 .cpp 文件顶部的以下行可以轻松抑制这些警告:

#pragma warning(push)
#pragma warning(disable:4702)
#include <xtree>
#pragma warning(pop)

有没有办法绕过这个警告/错误而不改变警告级别、构建调试、抑制警告或在地图中使用不同的类型?是否有计划在标准库中对此进行更改?

更新:
也许它是特定于编译器的。我正在使用vc7。 错误如下:

c:\program files\microsoft visual studio .net 2003\vc7\include\xtree(1116):错误 C2220:警告视为错误 - 未生成“对象”文件
c:\program files\microsoft visual studio .net 2003\vc7\include\xtree(1116) : 警告 C4702: unreachable code

显然 std::map 使用了 xtree。

【问题讨论】:

  • 这是一个编译器问题。没有“xtree 标准库”。

标签: c++ standard-library


【解决方案1】:

不幸的是,xtree 似乎是 VC7 中 map 的底层实现的一部分,因此无法采取任何措施来缓解它。看起来这是标准库中的一个错误。

是否可以使用更新的编译器?我相当肯定有您可以使用的最新版本编译器的免费下载,也许他们已经解决了这个问题。

如果这不是一个选项,可能最好的解决方案是将 map 的包含包装到您自己的私有标头中,并附上注释和您已经发现的 #pragma+include &lt;xtree&gt; 行(除了包括map。这样您就可以隐藏正常使用的解决方法。

【讨论】:

    猜你喜欢
    • 2015-05-22
    • 1970-01-01
    • 2023-03-13
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2020-08-20
    • 2021-02-28
    相关资源
    最近更新 更多