gpt4 book ai didi

g++ 中的 C++11 语言支持,没有 `-std=c++11` 的库破坏功能

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:53 24 4
gpt4 key购买 nike

有没有办法告诉 g++ 启用 C++11 的新语言功能,而不会因 ABI 修改而对标准 C++ 库进行任何重大更改?

添加 -std=c++11 编译标志告诉 g++ 启用语言和库功能,但无法安全地链接以这种方式创建的目标文件与使用不同 -std= 设置的那些。我希望能够在链接到 C++03 库的代码中使用语言增强功能,例如右值引用、移动构造函数(针对我自己的类)和 auto 关键字。

编辑:

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

最佳答案

不,您不能在没有 C++11 库功能的情况下启用 C++11 语言功能(如果不编辑 libstdc++ header 以删除所有 C++11 部分就不能启用。)

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

关于g++ 中的 C++11 语言支持,没有 `-std=c++11` 的库破坏功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15349095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com