使用不同的 C++ 编译器对 std::string 进行不同的名称修改

问题描述 投票:0回答:1

我正在玩去重整,我注意到对于 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++ 版本不同造成的,但我无法找出根本原因。

c++ g++ name-mangling
1个回答
0
投票

这完全在意料之中。

typeid
名称是实现定义的,并且要求在不同实现之间或什至同一实现(编译器)的不同版本之间保持相同。

© www.soinside.com 2019 - 2024. All rights reserved.