首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有‘-std= C++11’特性的C++11语言在g++中的支持

没有‘-std= C++11’特性的C++11语言在g++中的支持
EN

Stack Overflow用户
提问于 2013-03-11 21:34:19
回答 2查看 892关注 0票数 6

有没有办法告诉g++启用C++11的新语言特性,而不因ABI修改而破坏标准C++库?

添加-std=c++11编译标志会告诉g++同时启用语言和库特性,但是以这种方式创建的对象文件不能安全地与使用不同-std=设置的对象文件链接。我希望能够使用语言增强,比如rvalue引用、移动构造函数(针对我自己的类),以及与C++03库链接的代码中的C++03关键字。

编辑:

我感兴趣的是让g++启用它的C++11语言特性,但我希望它能够针对旧的C++03库进行解析、编译和链接。我不希望它使用标准库的C++11版本。这意味着,在我自己的代码中,我将能够使用auto、range foreach结构、rvalue引用等,但是我不能在标准C++库中使用新的C++11特性,比如对STL容器的std::move或rvalue-ref增强。不需要标准库的C++11版本的原因是各种对象的布局发生了变化,因此将期望标准库的不同版本的两个对象文件链接到同一个二进制文件是无效的。

EN

回答 2

Stack Overflow用户

发布于 2013-03-13 00:21:31

不,如果没有C++11库功能,就无法启用C++11语言特性(除非编辑libstdc++头以删除所有C++11部件)。

但是没有很多不兼容的符号(只要您不使用4.7.0或4.7.1,其中有一个不兼容的std::list,恢复为4.7.2),所以您可能只需要担心RB-树容器的erase()成员。您可以确保在主可执行文件中定义了符号的C++11版本,这样所有需要它的代码都将使用该符号的版本。其他库中期望C++03版本的代码将忽略返回值,C++11版本的代码将能够使用返回值。

票数 2
EN

Stack Overflow用户

发布于 2013-03-12 13:56:55

据我所知,GCC 4.7及以上有ABI修改。您可以尝试下面的版本。

它也可能有助于使用-std=gnu++11而不是-std=c++11。为什么我不知道,但这对我有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15349095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档