為什么運行此命令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。

慕的地8271018
TA貢獻1796條經驗 獲得超4個贊
返回的字符串是實現定義的。
gcc正在做的是返回錯誤的名稱。
您可以使用c ++ filt將損壞的名稱轉換為純文本
> a.out | c++filt

慕工程0101907
TA貢獻1887條經驗 獲得超5個贊
有沒有辦法使它只是打印
Blah
還是struct Blah
?
否。結果std::typeinfo::name()
不確定。它甚至可能為所有類型返回相同的字符串(或者,實際上對于所有類型都為空字符串),并且實現仍然是符合標準的。您一定不能依靠它的結果。真的,我發現對它唯一有用的是調試。
告訴我們您需要什么。特質通常是您所使用的。
- 3 回答
- 0 關注
- 1017 瀏覽
添加回答
舉報
0/150
提交
取消