是否可以同时使用 C++11 ABI _and_ cxx11 样式和旧样式字符串

Is it possible to use C++11 ABI _and_ both cxx11-style and old-style strings?

本文关键字:样式 cxx11 and 字符串 ABI C++11 是否      更新时间:2023-10-16

我有一些代码是用GCC 5.3.1构建的,没有设置_GLIBCXX_CXX11_ABI。现在,假设我想在同一段代码中同时使用旧式和新式std::__cxx11::string。这可能吗?如果是这样,如何?

笔记:

  • 我真的没有充分的理由这样做。我确实有一个不太好的理由,但让我们把它作为一个理论问题。
  • 如果 C++11 字符串不称为 std::string 也没关系。
你能在同一

代码中同时拥有新旧string实现吗?不完全是。《全能手册》指出:

ABI 转换添加了多个组件的新实现,使用 abi_tag属性和 __cxx11 内联命名空间 区分新实体和旧实体。

  • 可以使用_GLIBCXX_USE_CXX11_ABI宏按翻译单元选择新的或旧的 ABI。

  • 新的非引用计数字符串实现。

现在理论上你可以用-D_GLIBCXX_USE_CXX11_ABI=0编译并使用ext/vstring.h,这是GCC在突破性ABI更改之前符合字符串的实现。不过,如果事情爆炸了,我不会感到惊讶。