是否可以同时使用 C++11 ABI _and_ cxx11 样式和旧样式字符串
Is it possible to use C++11 ABI _and_ both cxx11-style and old-style strings?
我有一些代码是用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更改之前符合字符串的实现。不过,如果事情爆炸了,我不会感到惊讶。