亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么typeid.name()使用GCC返回奇怪的字符,以及如何使其打印出未修改的名稱?

為什么typeid.name()使用GCC返回奇怪的字符,以及如何使其打印出未修改的名稱?

C++
慕容708150 2019-12-26 08:43:49
為什么運行此命令main.cpp:#include <iostream>#include <typeinfo>using namespace std;struct Blah {};int main() {  cout << typeid(Blah).name() << endl;  return 0;}通過使用GCC版本4.4.4進行編譯:g++ main.cpp我得到這個:4Blah在Visual C ++ 2008上,我會得到:struct Blah有沒有辦法使它只是打印Blah還是struct Blah?
查看完整描述

3 回答

?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

實現的返回name是定義的:甚至不需要實現為不同類型返回不同的字符串。


從g ++得到的是修飾的名稱,您可以使用c++filt命令或來“分解” __cxa_demangle。


查看完整回答
反對 回復 2019-12-26
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

返回的字符串是實現定義的。


gcc正在做的是返回錯誤的名稱。

您可以使用c ++ filt將損壞的名稱轉換為純文本


> a.out | c++filt


查看完整回答
反對 回復 2019-12-26
?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

有沒有辦法使它只是打印

Blah還是struct Blah?

否。結果std::typeinfo::name()不確定。它甚至可能為所有類型返回相同的字符串(或者,實際上對于所有類型都為空字符串),并且實現仍然是符合標準的。您一定不能依靠它的結果。真的,我發現對它唯一有用的是調試。

告訴我們您需要什么。特質通常是您所使用的。


查看完整回答
反對 回復 2019-12-26
  • 3 回答
  • 0 關注
  • 1017 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號