使用g++编译C++14代码

63

我正在使用Ubuntu 14.04 LTS上的g++ 4.8.4。当尝试使用“-std=c++14”编译时,我遇到了这个错误:

g++: error unrecognized command line option '-std=c++14'

使用"-std=c++11"编译可以正常工作,因此我不确定出了什么问题。 g ++还没有支持c ++14吗?我是否使用了错误的命令行选项?

我使用的是"sudo apt-get install g ++",应该会自动检索最新版本,这正确吗?


6
你需要使用-std=c++1y,它已更改为-std=c++14,我认为是在5.2版本中。 - Shafik Yaghmour
3
你最好将你的GCC编译器升级到4.9或5版本。 - Basile Starynkevitch
4个回答

71

对于gcc 4.8.4,您需要使用-std=c++1y。从5.2开始,您可以使用-std=c++14

如果我们查看在线文档,我们可以找到每个版本的gcc手册,并且通过转到4.9.3方言选项下的GCC 4.9.3手册,我们可以看到它说:

'c++1y'

ISO C ++标准的下一个修订版,计划于2014年。支持是高度实验性的,并且几乎肯定会在未来的发布中以不兼容的方式进行更改。

直到版本 4.9.3,您必须使用 -std=c++1y,而 gcc 5.2 options 中说:

‘c++14’ ‘c++1y’

2014年ISO C++标准及其修订版。名称‘c++1y’已被弃用。

我不清楚为什么这被列在了“控制C语言方言选项”下,但目前文档就是这样组织的。


请注意,在gcc 4.8中,这仅为普通函数添加了返回类型推断的支持。许多其他功能直到4.9或5才被添加,详见这里 - skoush

21

在GCC 4.8版本中不支持-std=c++14标志。如果要使用C++14功能,则需要使用-std=c++1y进行编译。通过godbolt.org,似乎最早支持-std=c++14的版本是GCC 4.9.0或Clang 3.5.0。


5
G++支持C++14标准,可以通过-std=c++14-std=c++1y进行编译。在发布C++14标准之前,-std=c++1y是该标准的通用名称。旧版本(包括您使用的版本)只接受后者作为发布年份尚未确定时发布的版本。
引用:

我使用了“sudo apt-get install g++”命令,这会自动获取最新版本,这正确吗?

它会安装Ubuntu存储库中可用的最新版本,而不是存在的最新版本。
最新的GCC版本是5.2。

1
我使用了“sudo apt-get install g++”,这应该会自动检索最新版本,是吗?它会安装Ubuntu/Debian存储库选择作为默认未经修饰版本的任何主要版本的最新点发布版。通常有多个包可用于不同的(包括更新的)主要版本 - 在这种情况下,我们必须明确指定我们想要非默认主要版本,例如,在Debian unstable上我最近不得不执行的命令是sudo aptitude install g++-6。在那里,现在默认的软件包名称为“g++”,版本为5.x。 - underscore_d

2

请注意,如果有人想评论“回答代码而不是链接”,那么这个链接(https://gist.github.com/application2000/73fd6f4bf1be6600a2cf9f56315a2d91)是application2000的作品,而不是我的,所以我无法声称这是我的答案。但我可以向人们展示比我浏览过的5个单独的stackoverflow问题更有用的指导。 - WillC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接