2010-08-25 33 views
8

我完全知道std::type_info::name()的返回值是由實現定義的。爲什麼type_info :: name()未指定?

從C++標準(ISO/IEC 14882:2003§18.5.1.7):

返回:實現定義NTBS。

我的問題是:爲什麼?如果標準決定返回值應該是什麼,這個成員函數是不是更有用?

+0

+1對於這種好奇。我想,答案是給我想一些編譯器的空間。 – Chubsdad 2010-08-25 08:52:43

+0

既然你不能在編譯器之間混合使用二進制文件,那麼只要它在編譯器中是一致的,這並不是什麼大問題。 – 2010-08-25 15:15:45

回答

4

基本上,如果實施決定他們不能或不想支持RTTI,他們可以只需return "";。如果標準強制它返回某些東西,那麼它們可能會殺死任何具有RTTI資源不存在或想要被禁用的環境的兼容編譯器的能力(例如,微芯片)。

我們不要忘記我們不想在任何編譯器上強制使用ABI /名稱修改機制。

這遵循C++哲學「你不需要爲你不需要的東西付錢」。

+0

對於RTTI參數爲+1。但是不能標準規定類似*返回如果支持RTTI的動態類型的未加密名稱,如果不是*則返回靜態類型? – Job 2010-08-25 09:31:31

+0

@作業:可能,但如何格式化類型名稱?字符串存儲在哪裏?我同意有一個或者至少可靠的'name()'結果是很好的,但是鑑於編譯器的性質,未指定是最好的。 (他們如何處理類型是他們的業務,我們不能確定他們如何處理它,以及目標平臺是什麼,以及這些是否允許有意義的'name()'結果。) – GManNickG 2010-08-25 09:44:57

+1

我認爲'0' isn是一個有效的NTBS,所以這樣的實現至少應該返回「'」。 – sbi 2010-08-25 10:11:10

2

我們在談到供應商返回不同字符串時,我認爲這只是一種「我們這樣做,您改變」,「不,我們這樣做,您改變」編譯器供應商之間的事情。即使是標準委員會也不想惹惱編譯器團隊,並且創建一些不被任何供應商採用的中立的新標準往往意味着找到無論如何都無意義的東西。

爲什麼他們不是所有明顯的命名空間::類::函數等已經?一些當前的實現可能歷來發現使其匹配鏈接器所需的錯位名稱,偏執(或具有偏執的客戶端)重新使用存儲器等等是方便的。