Почему не указана type_info :: name ()?

Я полностью осознаю, что возвращаемое значение std :: type_info :: name () определяется реализацией.

Из стандарта C ++ (ISO / IEC 14882: 2003 §18.5.1.7):

Возвращает: NTBS, определяемый реализацией.

Мой вопрос: почему? Разве эта функция-член не была бы намного полезнее, если бы стандарт определял, каким должно быть возвращаемое значение?

8
задан hrbrmstr 12 May 2014 в 03:05
поделиться

2 ответа

В основном, если реализация решает, что она не может или не хочет поддерживать RTTI, она может просто вернуть "";. Если бы стандарт вынуждал что-то возвращать, они, возможно, убили бы любую возможность иметь совместимый компилятор для среды, где ресурсы для RTTI не существуют или хотят быть отключены (например, микрочип)

И давайте не будем забывать, что мы не хотим навязывать схему ABI/искажения имен любым компиляторам.

Это соответствует философии C++: «Вы не платите за то, что вам не нужно».

5
ответ дан 5 December 2019 в 21:15
поделиться

Там, где мы говорим о поставщиках, возвращающих разные строки, я думаю, что это просто "мы делаем это таким образом, вы меняете" "нет, мы делаем это так, ВЫ меняете" вещи между поставщиками компиляторов.Даже комитет по стандартам не хочет раздражать команды компиляторов, и создание какого-то нейтрального нового стандарта, который не используется ни одним поставщиком, в любом случае означает обнаружение чего-то бессмысленного.

Почему еще не все очевидные пространства имен::class::functions и т.д.? Некоторые текущие реализации, возможно, исторически сочли удобным, чтобы они соответствовали искаженным именам, требуемым компоновщиком, были параноидальными (или имели параноидальные клиенты) в отношении использования памяти и т. д.

2
ответ дан 5 December 2019 в 21:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: