在gcc/g++ 4.4.6中未识别出 -std=c++11 标志。

9
我有一些使用C++11标准编写的代码,我们的g++版本是4.4.6,据我所知,C++11应该受到支持(从4.3开始)。
然而,在尝试使用标志-std=c++11 -std=gnu++11进行编译时,我得到了错误的重复。
cc1plus: error: unrecognized command line option `-std=c++11`
cc1plus: error: unrecognized command line option `-std=gnu++11`

使用-std=c++0x编译会产生错误,例如:

DeviceInfo.cpp:22: error: expected initializer before ‘:’ token

对应于这行代码:

for (cl::Platform& plat : platforms)

这是C++11特定的语法吗?(在我看来似乎不是,但是所有这些代码都被作为示例给出,因此应该可以在编译器中正常工作。)

有什么帮助吗?


5
您需要GCC版本大于等于4.7才能使用c++11标志。 4.4版本太旧了,即使使用-std=c++0x,您也无法获取范围for循环功能。请至少阅读编译器的手册,其中列出了它支持的选项。 - Mat
3个回答

13

-std=c++11设置被较晚版本的GCC支持。对初期C++11的支持是通过-std=c++0x设置实现的。这可能是你应该尝试的。

而且,你正在尝试使用的for语法主要是C++11语法。


1
谢谢你的快速帮助 :) - Joe
如果能分享源链接,我会非常感激。 - Kapil Vyas

3

看起来4.6及以上版本支持基于范围的for循环。

这个页面展示了GCC对C++11特性的支持情况。


1
for (cl::Platform& plat : platforms)

是的,这是C++11特定用法。同时,GCC 4.7或更高版本支持C++11,使用-std=c++11选项。


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