Форум программистов, компьютерный форум CyberForum.ru

Как проверить, что находится в переменной? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
09.08.2013, 13:53     Как проверить, что находится в переменной? #1
Недавно возник вопрос...как проверить через инструкцию if какое значение находится в переменой, числовое или текстовое??

допустим такой код

int a=0;
if(a==int) ....

понятное дело что код не рабочий который опысан выше, я его написал чтобы изложить суть моего вопроса, так вот есть ли в С что то подобное, чтобы проверить переменную к какому типо он отностися...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2013, 13:53     Как проверить, что находится в переменной?
Посмотрите здесь:

C++ Как проверить что в переменной char хранится число?
C++ Проверить что в массиве минимальное значение находится раньше максимального
Проверить, что найденная фраза находится внутри кавычек C++
C++ Как сделать так,что бы при введение,например 0;0 выдавалось сообщение,что точка находится на границе?
Как правильно посмотреть, что находится в массиве пикселей в понятном виде? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
09.08.2013, 14:02     Как проверить, что находится в переменной? #2
Много тем было по этому вопросу. Вот тут есть варианты решения:
Определение введенного типа
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.08.2013, 14:03     Как проверить, что находится в переменной? #3
Язык C++, как и язык C, строго типизированный. Нельзя в целочисленную переменную записать что-то, что не является целым числом.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
09.08.2013, 14:07     Как проверить, что находится в переменной? #4
Цитата Сообщение от GoldDragon Посмотреть сообщение
int a=0;
Тип int служит для хранения целочисленных значений. Зачем это проверять если ты сам пишешь программу и сам прекрасно об этом знаешь?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.08.2013, 14:11     Как проверить, что находится в переменной? #5
Цитата Сообщение от GoldDragon Посмотреть сообщение
допустим такой код
int a=0;
if(a==int) ....
допустим, скажи лучше словами, что ты хотел допустить этим? А то тут все в догадках теряются.
Salmon
09.08.2013, 14:16
  #6

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
допустим, скажи лучше словами, что ты хотел допустить этим? А то тут все в догадках теряются.
If(a==int) дословно "если переменная 'a' - переменная типа int, то.."
чего не понятно?

Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.08.2013, 14:20     Как проверить, что находится в переменной? #7
Цитата Сообщение от Salmon Посмотреть сообщение
If(a==int) дословно "если переменная 'a' - переменная типа int, то.."
чего не понятно?
а какой она ещё может быть переменной-то? Это и называется "строгая типизация", потому что вопросов о типе переменных не возникает.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.08.2013, 14:21     Как проверить, что находится в переменной? #8
Для особых извращенцев:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <typeinfo>
 
int main()
{
    int a; // пробуем разные типы тут
    if( typeid(int) == typeid(a) )
    {
        std::cout << "int\n";
    }
    else
    {
        std::cout << "not int\n";
    }
}
Salmon
1 / 1 / 0
Регистрация: 15.05.2013
Сообщений: 11
09.08.2013, 14:22     Как проверить, что находится в переменной? #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а какой она ещё может быть переменной-то?
Хотя да, вы правы.. Если переменная не объявлена - ее нет..
Извиняюсь..
coloc
09.08.2013, 14:24
  #10

Не по теме:

Tulosba, а скажите когда реально нужно юзать RTTI? А то в книге не описано ни черта про этот аспект

Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
09.08.2013, 14:26     Как проверить, что находится в переменной? #11
ну если предположить что откуда то извне каким то неведомым образом к нам попадает неведомая переменная то можно исполльзовать typeinfo
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.08.2013, 14:33     Как проверить, что находится в переменной? #12
Цитата Сообщение от Кудаив Посмотреть сообщение
ну если предположить что откуда то извне каким то неведомым образом к нам попадает неведомая переменная то можно исполльзовать typeinfo
каким именно неведомым образом? Через какой-то абстрактный указатель? Как оказалось, что некая функция получила на вход "то не знаю что"?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.08.2013, 14:36     Как проверить, что находится в переменной? #13
coloc, насколько я понимаю, typeid() имеет смысл использовать только когда нужно просто узнать что за класс, но не работать с объектом этого класса. Иначе - используется dynamic_cast<>, который тоже является частью RTTI. Соответственно, там где есть иерархии классов, можно использовать в том числе и typeid().
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <typeinfo>
 
class B
{
public:
    virtual ~B() {};
};
 
class D: public B
{
 
};
 
int main()
{
    B* d = new D;
 
    if( typeid(*d) == typeid(D) )
    {
        std::cout << "D";
    }
    else
    {
        std::cout << "not D\n";
    }
}
Еще не стоит забывать, что RTTI работает только с полиморфными классами (т.е. где есть хотя бы 1 виртуальный метод). Можно в этом убедиться, убрав в примере виртуальный деструктор из базового класса.
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
09.08.2013, 14:37     Как проверить, что находится в переменной? #14
Kuzia domovenok, c POD пример привести затрудняюсь, но вот с классами сработает очень неплохо - имеется класс родитель и целое дерево его потомков + имеется функция принимающая указатель на класс родитель и какой потомок извне поступит в функцию неизвестно
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.08.2013, 14:46     Как проверить, что находится в переменной? #15
Цитата Сообщение от Кудаив Посмотреть сообщение
Kuzia domovenok, c POD пример привести затрудняюсь, но вот с классами сработает очень неплохо - имеется класс родитель и целое дерево его потомков + имеется функция принимающая указатель на класс родитель и какой потомок извне поступит в функцию неизвестно
Если появилась функция, принимающая указатель на родителя. + Если ей потребовалось, что-то ещё, кроме публичных методов класса родителя = иерархия классов говно
Переделывай интерфейс родителя, переделывай иерархию классов, добавь в родитель виртуальных методов, реализующих требуемую работу.
Если же решать через typeid - всё оопэшное ООП, вся знаменитая оопэшная безопасность и расширяемость - всё летит к чертям собачьим!
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
09.08.2013, 14:56     Как проверить, что находится в переменной? #16
Если память мне не изменяет есть еще такая штука как определение типа переменной в процессе работы программы возможно именно с этим автор данного поста и столкнулся ))
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
09.08.2013, 14:57     Как проверить, что находится в переменной? #17
батенька, тролли например активно юзают метаинформацию типа, а вы так и курить низкоуровневые языки - извольте в раздел ясли Си
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.08.2013, 15:11     Как проверить, что находится в переменной? #18
Цитата Сообщение от Кудаив Посмотреть сообщение
метаинформацию типа
Цитата Сообщение от Кудаив Посмотреть сообщение
низкоуровневые языки
Цитата Сообщение от Кудаив Посмотреть сообщение
Си
А с каких пор Си - низкоуровневый? Может ещё и плюсы низкоуровневым назовёшь?
korvin_
 Аватар для korvin_
1327 / 1098 / 160
Регистрация: 28.04.2012
Сообщений: 3,926
09.08.2013, 15:50     Как проверить, что находится в переменной? #19
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а какой она ещё может быть переменной-то? Это и называется "строгая типизация", потому что вопросов о типе переменных не возникает.

Не по теме:

Это называется статическая типизация. http://stackoverflow.com/a/430414

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2013, 15:51     Как проверить, что находится в переменной?
Еще ссылки по теме:

C++ Как проверить успешность создания динамической переменной?
Как проверить размер чаровской переменной именно в битах C++
Как проверить что к переменной прибавилось более чем X C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
09.08.2013, 15:51     Как проверить, что находится в переменной? #20
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А с каких пор Си - низкоуровневый? Может ещё и плюсы низкоуровневым назовёшь?
Слайды 6-7) http://www.slideshare.net/profyclub_ru/ss-9536891
Yandex
Объявления
09.08.2013, 15:51     Как проверить, что находится в переменной?
Ответ Создать тему
Опции темы

Текущее время: 23:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru