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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 59, средняя оценка - 4.83
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
#1

Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении? - C++

06.08.2010, 20:13. Просмотров 7427. Ответов 25
Метки нет (Все метки)

Пытаюсь сделать функцию с передачей нескольких параметров,используя битовые операции. В качестве параметров думаю использовать не стандартные define-ы,а перечисление enum.
Можно ли задать тип значений для членов enum явно(мне в конкретном случае нужен unsigned int)?
Что будет при битовой операции,если значение результата выходит за пределы типа (даже не уверен,возможно ли,но вроде бы да)?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2010, 20:13     Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении?
Посмотрите здесь:

C++ Как проверить какой тип данных вводится?
Зачем нужно явно указывать тип переменной? C++
Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си? C++
Путаница с типами данных TCHAR и char. Какой тип данных выбрать? C++
Геометрическая прогрессия: какой тип данных определить C++
Как результат функции конвертировать в тип Enum? C++
C++ Какой тип данных правильный при определении времени выполнения?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17189 / 5443 / 337
Регистрация: 30.03.2009
Сообщений: 14,776
Записей в блоге: 26
07.08.2010, 00:14     Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении? #21
В любом случае значение NULL связывать с пустой маской - неправильно. Потому как одно - указатель в память, а другое - целое число (набор битов)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
07.08.2010, 00:14     Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении? #22
Цитата Сообщение от fasked Посмотреть сообщение
разве NULL это не 0, то есть
#define NULL 0
во всяком случае в Си++.
В C++ Страуструп вообще не рекомендует применять эту сишную примочку (злосчастный макрос NULL, как он его называет), а везде использовать нормальный человеческий 0.
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
07.08.2010, 00:16  [ТС]     Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении? #23
Цитата Сообщение от Evg Посмотреть сообщение
В любом случае значение NULL связывать с пустой маской - неправильно. Потому как одно - указатель в память, а другое - целое число (набор битов)
Постараюсь больше не забывать
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17189 / 5443 / 337
Регистрация: 30.03.2009
Сообщений: 14,776
Записей в блоге: 26
07.08.2010, 00:19     Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении? #24
Цитата Сообщение от Mr.X Посмотреть сообщение
В C++ Страуструп вообще не рекомендует применять эту сишную примочку (злосчастный макрос NULL, как он его называет).
А что же он рекомендует применять? Я понимаю, если бы хотя бы класс std::string был сделан по-человечески, так ведь в нём нет нормального аналога NULL'а.
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
07.08.2010, 00:30     Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении? #25
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от #pragma Посмотреть сообщение
Это вроде может зависеть от реализации,то есть может быть
C++
1
#define NULL (void *)0
вот как раз таки на Си++ так делать нельзя, из указателя типа void запрещено неявное преобразование в указатели любых других типов.
я потому и заинтересовался, что везде NULL в принципе объявляется обычным целочисленным значением.
плюс к тому же вот слова Страуструпа:
In C++, the definition of NULL is 0, so there is only an aesthetic difference. I prefer to avoid macros, so I use 0. Another problem with NULL is that people sometimes mistakenly believe that it is different from 0 and/or not an integer. In pre-standard code, NULL was/is sometimes defined to something unsuitable and therefore had/has to be avoided. That's less common these days.
Может в Си NULL и бывает разный, но в Си++ по стандарту всегда ноль.

я не спорю с тем, что NULL нельзя присваивать целочисленным значениям. но это возможно.

Добавлено через 3 минуты
Цитата Сообщение от Evg Посмотреть сообщение
А что же он рекомендует применять? Я понимаю, если бы хотя бы класс std::string был сделан по-человечески, так ведь в нём нет нормального аналога NULL'а.
в новом стандарте появился nullptr - специально для указателей.
If you have to name the null pointer, call it nullptr; that's what it's going to be called in C++0x. Then, "nullptr" will be a keyword.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2010, 09:58     Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении?
Еще ссылки по теме:

C++ Как осуществить ввод числа, не зная какой тип числа будет введён?
Какой символьный тип использует тип std::string? C++
Как сделать тип enum в структуре беззнаковым C++
C++ Какой будет тип у переменной auto, которой присвоили лямда-функцию

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17189 / 5443 / 337
Регистрация: 30.03.2009
Сообщений: 14,776
Записей в блоге: 26
07.08.2010, 09:58     Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении? #26
Цитата Сообщение от fasked Посмотреть сообщение
Может в Си NULL и бывает разный, но в Си++ по стандарту всегда ноль.
Возможно. Я просто про Си++ мало что знаю и всё как-то подсознательно в контексте языка си пишу

Цитата Сообщение от fasked Посмотреть сообщение
в новом стандарте появился nullptr - специально для указателей
А в старом стандарте-то что было? Если кто-то не рекомендует чем-то пользоваться, то как минимум для приличия надо порекомендовать что-то взамен

Добавлено через 10 минут
Цитата Сообщение от fasked Посмотреть сообщение
я не спорю с тем, что NULL нельзя присваивать целочисленным значениям. но это возможно
Посмотрел на код из-под g++. Там в качестве NULL везде задефайнено значение __null. Даже при опциях типа -ansi (т.е. "старый" стандарт). Я правильно понимаю, что __null изначально было в Си++ и предполагало некое значение, соотвествующее "пустому" значению? Или всё-таки оно означает некоторое "несуществующее" значение? Мне бы было интересно узнать этот момент поподробнее

Исходя из этого можно будет понять правильный ответ на вопрос из поста #7 и прикинуть, что там с аналогом NULL в std::string. По последнему вопросу особенно интересуем вариант состыковки кодов на Си и Си++: выработка NULL на Си и присваивание значения в string, далее передача string'а транзитом через коды Си++, а затем опять передача в Си. Дойдёт значение NULL или нет?
Yandex
Объявления
07.08.2010, 09:58     Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении?
Ответ Создать тему
Опции темы

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