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

Перечисления. Переменная не входит в диапазон - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Указатели http://www.cyberforum.ru/cpp-beginners/thread939276.html
Кто нибудь может помочь с объяснением указателей? 1) struct pizza { string name; int diameter; int weight; }; int main ()
C++ ошибка в коде #include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h> int main () { for(long index = 40000; index < 2000000; index++) http://www.cyberforum.ru/cpp-beginners/thread939269.html
Как узнать в какой ОС запускается программа? C++
Как узнать в какой ОС запускается программа? И уже дальше делать то или иное в зависимости от ОС.
C++ Показать все четные числа столько, сколько выполняет оператор "for"
здравствуйте подскажите пожалуйста как мне сделать чтобы показать все четные числа столько сколко выполнает оператор "for" #include <iostream> using namespace std; int main() {
C++ Отладка в Visual Studio 2010, не отображаются контрольные переменные http://www.cyberforum.ru/cpp-beginners/thread939245.html
Помогите пожалуйста разобраться, что у меня случилось с отладкой. С определенного момента просто перестали отображаться контрольные переменные в режиме отладки, хотя раньше отображались. Например я...
C++ Актуально ли WinApi? Доброе всем время суток Есть вопрос касающийся актуальности winapi: Сейчас собственно изучаю winapi но сталкивался со слухами о том что винапи уже не актуален всвязи с тем на windows 8 придумали... подробнее

Показать сообщение отдельно
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
18.08.2013, 09:58
BigLow, реальный тип, которым представлен enum может быть больше, чем требуется. Посмотрите, например, чему равен sizeof(flag). Если этого размера будет достаточно, чтобы представить число 90, то ничего удивительного нет.

Другое дело, что Страуструп прав, это неопределенное поведение - компилятор может выбрать тип, минимально достаточный для представления диапазона enum, и большие значения в него "не войдут". Вот пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
enum flag{x = 1, y = 2, z = 4, e = 8};  
 
int main()
{
    flag f1 = (flag)256;             
    
    std::cout << sizeof(flag) << "\n";
    std::cout << f1;                   
 
    return 0;
}
Если скомпилировать в gcc с флагом -fshort-enums, то sizeof(flag) будет 1 байт. То есть минимальный размер, необходимый для представления указанных чисел от 1 до 8. С присвоением 256 будет переполнение, т.к. одного байта уже недостаточно. Короче, все зависит от компилятора и его настроек.
3
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru