我有一些代码是用GCC 5.3.1构建的,没有设置_GLIBCXX_CXX11_ABI。现在,假设我想在相同的代码中使用旧式和新式std::__cxx11::string
。那可能吗?如果是这样,怎么样?
注意:
std::string
,那就没关系。答案 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的符合字符串实现。如果事情爆发,我不会感到惊讶。