Форум программистов, компьютерный форум 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
Помогите пожалуйста разобраться, что у меня случилось с отладкой. С определенного момента просто перестали отображаться контрольные переменные в режиме отладки, хотя раньше отображались. Например я не могу отслеживать переменную h в цикле: for(int h=0;h<10;h++){ ... } Может кто сталкивался с такой проблемой...
C++ Актуально ли WinApi? Доброе всем время суток Есть вопрос касающийся актуальности winapi: Сейчас собственно изучаю winapi но сталкивался со слухами о том что винапи уже не актуален всвязи с тем на windows 8 придумали чтото новое или както так вообщем хотел спросиль людей которые следят за этими вопросами или просто обладают инфой ну и естевственно получить совет что актуально а что нет и есть ли смысл разбираться в... подробнее

Показать сообщение отдельно
Schizorb
 Аватар для Schizorb
508 / 460 / 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 будет переполнение, т.к. одного байта уже недостаточно. Короче, все зависит от компилятора и его настроек.
 
Текущее время: 03:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru