【问题标题】:C++11 functionality with MinGWMinGW 的 C++11 功能
【发布时间】:2013-04-14 16:58:52
【问题描述】:

我尝试对 unordered_map 使用 emplace() 函数,编译器说不存在这样的函数。

我输入了-std=c+11,上面写着cc1plus.exe: error: unrecognized command line option '-std=c+11'

我可以通过 mingw 以某种方式使用 C++11 功能吗?

【问题讨论】:

  • 尝试c++11 而不是c+11
  • 要么,要么尝试c++0x
  • 都不行(我已经开启了 c++0x)
  • 你的MinGW是什么版本(你可以通过gcc -v查看)? std=c++11 是最近才推出的。
  • @PetrosDrakoulis:那么也许它在那个版本上不可用。 MinGW 现在最高到 4.7.2。

标签: c++ windows c++11 mingw


【解决方案1】:

来自GCC documentation

C++0x 是新的 ISO C++ 标准的工作名称,当时它是 于 2011 年作为 C++11 发布,并在其中引入了许多新功能 标准 C++ 语言和库。该项目旨在实施 GCC 中的新 C++11 功能,并使其成为首批编译器之一 将 C++11 带给 C++ 程序员。

C++11 功能作为“主线”GCC 编译器的一部分提供 GCC 的 Subversion 存储库和 GCC 4.3 及更高版本的主干。到 启用 C++0x 支持,添加命令行参数 -std=c++0x 到 你的 g++ 命令行。或者,除了启用 GNU 扩展 C++0x 扩展,将 -std=gnu++0x 添加到您的 g++ 命令行。海合会 4.7 以后也支持-std=c++11和-std=gnu++11。

因此,对于 gcc 4.3 到 4.6,使用 -std=c++0x,对于更高版本,使用 -std=c++11。在 gcc 4.8 中添加了对 map::emplace 的库支持

【讨论】:

  • 同样的错误:'class std::unordered_map<:basic_string>, dictionaryWord>'没有名为'emplace'的成员
  • 我开始相信我不能在 4.6 中使用 c++ 11,或者至少是全部。
  • 您需要 gcc 4.8 才能使用map::emplace,参见例如this question
  • 我尝试为 windows 编译的项目是一个月前在 Linux Gcc 4.7.2 中制作的。 linux gcc 4.7.2中有emplace()
  • @PetrosDrakoulis 这很令人惊讶,因为gcc 4.7.2 docs 表示emplace 缺少map。另请参阅ideone.com/dqScM9 安全的赌注是安装 MinGW 4.8,例如来自nuwen.net/mingw.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
相关资源
最近更新 更多