GCC의 typeid.name() 특징
typeid.name() 함수는 변수 유형에 대한 정보를 얻는 데 자주 사용됩니다. 또는 표현. 그러나 GCC로 컴파일할 때 이 함수는 예상했던 수정된 유형 이름 대신 겉보기에 무의미해 보이는 문자를 반환하는 것으로 관찰되었습니다. 이 동작은 더 명확한 표현을 제공하는 Visual C와 같은 다른 컴파일러와 대조됩니다.
불일치의 원인
불일치의 원인은 typeid 구현에 있습니다. name()은 컴파일러의 구현에 의해 정의됩니다. 예를 들어 GCC는 생성자 및 소멸자의 이름 및 서명과 같은 유형에 대한 추가 정보가 포함된 장식된 이름을 반환합니다.
장식된 이름 디맹글링
데코레이팅된 문자열에서 더 읽기 쉬운 유형 이름을 얻으려면 c filt 또는 __cxa_demangle과 같은 도구를 사용할 수 있습니다. 이러한 도구는 데코레이팅된 이름을 "해체"하여 추가 정보를 제거하고 난해하지 않은 유형 이름만 남깁니다.
예: c filt를 사용한 디맹글링
#include <iostream> #include <typeinfo> using namespace std; struct Blah {}; int main() { cout << c++filt::demangle(typeid(Blah).name()) << endl; return 0; }
이 수정된 코드를 컴파일하고 실행하면 원하는 결과를 얻을 수 있습니다. 출력:
struct Blah
결론
GCC의 typeid.name() 함수는 처음에 장식된 유형 이름을 반환하지만 이를 분해하여 손상되지 않은 유형을 얻을 수 있습니다. c filt 또는 __cxa_demangle과 같은 도구를 사용하여 이름을 지정합니다. typeid.name()의 구현 정의 특성을 이해하면 C 코드에서 원하는 유형 정보를 효과적으로 검색할 수 있습니다.
위 내용은 GCC의 `typeid.name()`이 읽을 수 없는 이름을 반환하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!