C++ 哈希弃用警告

标签 c++ deprecated deprecation-warning

我对 C++ 和一般编程还很陌生,目前正在阅读 Bjarne Stroustrup 的编程:使用 C++ 的原理和实践。我一直收到以下错误

Severity Code Description Project File Line Error C2338 <hash_map> is deprecated and will be REMOVED. Please use <unordered_map>. You can define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS to acknowledge that you have received this warning.

我知道头文件 std_lib_facilities.h 使用了某种已弃用的函数,但有没有办法绕过它?它看起来像是要我定义“_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS”,但我不确定该怎么做。任何帮助将不胜感激!!

最佳答案

警告不是关于“某些功能”——而是关于整个 stdext .而且它不仅仅是手摇式的,最终将被停产,被弃用:它不会随 2015 一起发布。

在 00 年代初期,正在修订 C++ 标准;包括微软在内的不同编译器供应商将提案连同原型(prototype)一起提交给委员会。因此可以对它们进行测试和评估,Microsoft 将其提议的扩展的实现放在了 stdext 中。 .

最终,委员会选择了他们要纳入该修订版的内容,并发布了一份技术报告(“TR1”)。预计在 2009 年底前完成,这被称为“C++0x”,编译器供应商开始在 tr1 中实现这些功能。命名空间。最终在 2011 年,标准最终确定,我们在 std 中得到了“C++11”及其所有部分。他们属于哪里。

根据微软的提议,容器应该是std::hash_map , 但 C++ 委员会选择使用术语 unordered_map . std::map是有序容器,stdext::hash_map ,尽管有这个名字,但它不是。

Microsoft 的编译器在完成对 C++11 的全面支持方面一直是最慢的,标准委员会已经完成了第二个变体 (C++14) 并正在研究第三个 (C++17)。微软即将在 VS2015 中完成 C++11 和 C++14 的大部分内容,但有一些明显的异常(exception)情况显然将成为 VS 编译器的主要问题(尤其是 constexpr 和模板变量)。

  1. Visual Studio 2015 不提供 stdext - 它消失了这不是那些“好吧,它最终可能会消失”的案例之一。

  2. stdext特定于 Microsoft 编译器系列,因此使用 stdext:: 编写代码任何东西都不可移植:http://ideone.com/x8GsKY

  3. 您需要的功能的标准化版本是 std::unordered_map ,你应该使用它。本质上是一样的。

  4. stdext::hash_map 中有 Unresolved 错误.

如果你真的必须使用stdext::hash_map , 通过添加

使警告静音
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS

stdafx.h 的顶部我假设你的项目有,或者在你之前的头文件中 #include <stdext/...> ,或在解决方案资源管理器中:

  • 在解决方案资源管理器中右键单击您的项目条目,
  • 选择属性,
  • 选择配置:All Configurations ,
  • 展开 C/C++树条目,
  • 选择 Preprocessor ,
  • “预处理器定义”可能会说 <different options>
  • 在“预处理器定义”条目的开头添加 _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1;所以它显示为 _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1;<different options> . (或者原本应该跟在 ; 之后的任何东西)

关于C++ 哈希弃用警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30430789/

相关文章:

c++ - 在 Visual C++ 上使用 msxml6.h 时出错

Java 弃用 API 和 SuppressWarnings "deprecation"- 实用方法

java - 如果不推荐使用 Swing,还有什么替代方案?

java - 由于 Javadoc,避免在替换类中抑制 "deprecated"

ruby-on-rails - Zeitwerk "DEPRECATION WARNING: Initialization autoloaded the constants"由在 lib 文件夹中包含模块引起

C++ unordered_map 导致编译时错误

c++ - 在 C++ 中出现 "scope"错误

java - Eclipse - @Deprecated 警告隐藏弹出的 java 文档

c++ - 使用 SWIG 在 Python 中包装 C++ 类

twitter-bootstrap-3 - 如何在 Bootstrap 4 中创建页眉?