crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> typeid(*<class>).name(), откуда 15 в имени
ЙаМайскЫйПчОЛ
  опции профиля:
сообщение 27.8.2009, 12:07
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 154
Регистрация: 10.7.2008
Из: СПб
Пользователь №: 232

Спасибо сказали: 7 раз(а)




Репутация:   5  


Доброго времени суток.

вот такой код
#include "parameter.h"
#include <typeinfo>
#include <iostream>
#include <string>
int main(int argc, char ** argv)
{
    Parameter * fpw = new FreqParametrWgt();
    ModeParametrWgt * mpw = new ModeParametrWgt();
    FreqParametrWgt * fpw1 = new FreqParametrWgt();

    std::cout << typeid(*fpw).name() << '\n';
    std::cout << typeid(*fpw1).name() << '\n';
    std::cout << typeid(*mpw).name() << '\n';

    return 0;
}

а вывод вот:
Раскрывающийся текст

15FreqParametrWgt
15FreqParametrWgt
15ModeParametrWgt

вопрос... откуда 15 в имене???
впринципе не критично, но не понятно...
ЗЫ: вывод одинаковый в виндовсе и в линуксе

Сообщение отредактировал ЙаМайскЫйПчОЛ - 27.8.2009, 12:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
BRE
  опции профиля:
сообщение 27.8.2009, 12:50
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Похоже что 15 это длина имени класса, а вот кто ее печатает или добавляет к имени пока не смотрел.

Точно, это длина имени класса.
Проверял на gcc (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2).

Причем если в typeid передать указатель на объект, то впереди этой сигнатуры добавляется 'P' (P6Person).
Для стандартных типов длина не указывается, т.е.
int - 'i'
int* - 'Pi'

И вот еще ссылку нашел: http://bytes.com/topic/c/answers/139862-typeinfo
Если используются namespace, то впереди будет идти N<длина имени namespace><имя namespace>.

Сообщение отредактировал BRE - 27.8.2009, 13:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- ЙаМайскЫйПчОЛ   typeid(*<class>).name()   27.8.2009, 12:07
- - Litkevich Yuriy   Первый раз сталкиваюсь с таким ключевым словом - t...   27.8.2009, 12:17
- - ЙаМайскЫйПчОЛ   Я тоже, мне просто на этапе выполнения надо сравни...   27.8.2009, 12:21
- - Litkevich Yuriy   Я вот в аглицкой вики нашёл, там нет "15...   27.8.2009, 12:24
- - BRE   Похоже что 15 это длина имени класса, а вот кто ее...   27.8.2009, 12:50
- - ЙаМайскЫйПчОЛ   Litkevich Yuriy, Совершенно верно... по другим эк...   27.8.2009, 13:19
- - ЙаМайскЫйПчОЛ   BRE, это да совпадает с длинной, но... лано еще по...   27.8.2009, 14:38
|- - BRE   Цитата(ЙаМайскЫйПчОЛ @ 27.8.2009, 15:38) ...   27.8.2009, 14:45
- - ЙаМайскЫйПчОЛ   BRE, мне имя фактически не важно, я их буду сравн...   27.8.2009, 14:50
|- - BRE   Цитата(ЙаМайскЫйПчОЛ @ 27.8.2009, 15:50) ...   27.8.2009, 15:02
- - ЙаМайскЫйПчОЛ   таже %$рня)))) только gcc единым и живу))))   27.8.2009, 15:04
- - Litkevich Yuriy   у GCC есть ключики соответствия стандартам, может ...   27.8.2009, 16:00
- - Tonal   Таки стандарт не определяет что за строку будет во...   28.8.2009, 8:10


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 10:00