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

时间:2016-06-03 21:19:32

标签: c++ c++11 gcc stdstring abi

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

注意:

  • 我没有充分的理由这样做。我确实有一个不太好的理由,但请让它成为一个理论问题。
  • 如果C ++ 11字符串没有被称为std::string,那就没关系。

1 个答案:

答案 0 :(得分:1)

您是否可以在同一代码中同时使用新旧string实现?不完全是。 Almighty Manual州:

  

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

     
      
  • 可以使用_GLIBCXX_USE_CXX11_ABI宏选择每个翻译单元使用新旧ABI。

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

  •   

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