我正在玩去重整,我注意到对于 std::string 重整名称取决于所使用的编译器。例如,这个简单的程序:
#include <cxxabi.h>
#include <iostream>
#include <string>
int main(){
std::cout << typeid(std::string).name() << std::endl;
return 0;
}
在 CentOS 7 下使用 g++ 7.3.1(来自 devtoolset-7)进行编译,并返回
--std=c++14
:
Ss
在 Ubuntu 18.04 下使用具有相同标志的 g++ 7.5.0 时:
NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
我不明白是什么决定了不同的行为,因为两个编译器版本非常相似。我唯一想到的是,也许这可能是由于 libstdc++ 版本不同造成的,但我无法找出根本原因。
这完全在意料之中。
typeid
名称是实现定义的,并且不要求在不同实现之间或什至同一实现(编译器)的不同版本之间保持相同。