Будут ли множественные вызовы typeid (T) .name () возвращать один и тот же указатель? - PullRequest
6 голосов
/ 25 апреля 2011

В C ++ я могу использовать оператор typeid для получения имени любого полиморфного класса:

const char* name = typeid( CMyClass ).name();

Строка, на которую указывает возвращенный const char* , будет доступна моей программе дляпока существует соответствующий класс .

Будут ли множественные вызовы typeid(T).name() возвращать одно и то же значение указателя для одного и того же class T или им разрешено возвращать разные указатели?

Ответы [ 4 ]

3 голосов
/ 25 апреля 2011

Нет, они не обязаны возвращать тот же указатель.

Я также видел в дикой системе, что нет.
У каждой DLL была своя собственная копия объекта типа, содержащего nmae, поэтому вызов typeid (N) .name в совместно используемой lib A и совместно используемой lib B приведет к различному указателю (хотя та же основная строка).

2 голосов
/ 25 апреля 2011

Стандарт не говорит. И кстати, время жизни type_info, возвращаемого typeid, заканчивается в конце программы.

2 голосов
/ 25 апреля 2011

Я бы сказал, что это определяется реализацией.В стандарте (основанном на N3290) это относится к классу std::type_info (§18.7.1):

const char* name() const noexcept;

Returns: An implementation-defined NTBS.

Нет такой формулировки, которую я могу найти, требующей равенства этих указателей для объектов type_info, описывающихтого же типа.

2 голосов
/ 25 апреля 2011

Возможно, но зачем полагаться на это, а не на фактическую информацию о типе, если вы хотите делать сравнения?

...