有時我需要在使用C或C++進行編程時學習表達式的類型。有時候有一個好的IDE或者現有的文檔可以幫助我,但有時候不會。我經常覺得這樣的構造可能是有用的:確定表達式的類型
void (*myFunc)(int);
printf("%s", nameoftype(myFunc)); //"void (*)(int)"
int i, unsigned int u;
printf("%s", nameoftype(i+u)); //"unsigned int"
這對於C++尤其如此;認爲const對象的訪問器 - 它們是否返回一個const引用或一個副本?認爲動態演員和模板班。
我該怎麼做? (即學習表達式的類型)
我使用GCC,但據我所知,它沒有這樣的擴展名。所以我想我很好奇人們如何解決這個問題。 (歡迎編譯時和運行時解決方案。)
:
如果你能走出本地環境的生活,你總是可以創建一個函數模板這樣。然後你可以使用命令行工具'C++ filt'去除它。 – 2009-05-06 14:43:05
啊,我從來沒有用過C++ filt。我會研究它,謝謝。 – aib 2009-05-07 23:53:00
目前不推薦使用這種方法,在某些情況下應該考慮棄用。它的原因雖然它打印類型,類型輸出是繁瑣的。此外有時它打印無效類型!具體的例子在新的「有效的現代C++」第1章第4項中有明確的解釋。 – likern 2015-01-21 11:57:37