Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2008, 00:20   #1
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию typeid() хм =(

Код:
  int agg=0;
 //if (typeid(agg).name()=="int") agg++;
 cout<<agg;
как я понимаю должно получится что agg принимает значение "1",тока оно почему то остаеться 0 =(((((
bondik вне форума Ответить с цитированием
Старый 29.04.2008, 00:46   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

type_info::name() - имеет тип char*, а сравнивать в C указатели на char оператором "==" - дело лишенное смысла, сравниваются адреса, "лежащие" в указателях. Так что либо нужно приводить к "настоящим" строкам C++, либо сравнивать старым добрым способом - strcmp, либо собственным оператором класса type_info.

Код:
#include <iostream>
#include <typeinfo.h>
#include <string>

int main()
{
	using namespace std;

	int i;
	string s;

	boolalpha(cout);

	cout	<< "((s = typeid(i).name()) == \"int\") = " << ((s = typeid(i).name()) == "int") << endl
			<< "(typeid(i).name() == \"int\") = " << (typeid(i).name() == "int") << endl 
			<< "(0 == strcmp(typeid(i).name(), \"int\")) = " << (0 == strcmp(typeid(i).name(), "int")) << endl
			<< "(typeid(i) == typeid(int signed)) = " << static_cast<bool>(typeid(i) == typeid(int signed)) << endl
			<< "(typeid(i) == typeid(int unsigned)) = " << static_cast<bool>(typeid(i) == typeid(int unsigned)) << endl;
	cin.get();
	return 0;
}
результат:
Цитата:
((s = typeid(i).name()) == "int") = true
(typeid(i).name() == "int") = false
(0 == strcmp(typeid(i).name(), "int")) = true
(typeid(i) == typeid(int signed)) = true
(typeid(i) == typeid(int unsigned)) = false

Последний раз редактировалось B_N; 29.04.2008 в 05:02. Причина: решил добавить код...
B_N вне форума Ответить с цитированием
Старый 30.04.2008, 17:31   #3
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

Спасибо за разьяснение
bondik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц