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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2012, 20:35   #11
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2Granus

ЕЕ знчение нельзя изменить (если конечно это изначально константная переменная, а не константная ссылка, например)
Технически - нет ничего сложного. Изменяется только так.
Но на практике это - UB.

Цитата:
Сообщение от Granus Посмотреть сообщение
Например, потому, что она хранится в той же памяти, что и не-const переменные, и хаками с указателями её значение можно изменить.
Нет никакой гарантии, что константа "по праву рождения" вообще будет физически существовать. Если нигде ни разу не будет использован её адрес, компилятор может вообще не выделить под неё память, а повтыкать магические числа по местам, где используется её значение.

Последний раз редактировалось Stilet; 07.09.2012 в 20:59.
_Bers вне форума Ответить с цитированием
Старый 07.09.2012, 22:48   #12
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Нет никакой гарантии, что константа "по праву рождения" вообще будет физически существовать. Если нигде ни разу не будет использован её адрес, компилятор может вообще не выделить под неё память, а повтыкать магические числа по местам, где используется её значение.
Да, это так, но если мы попробуем её изменить, компилятор не сделает оптимизацию и она действительно будет существовать. То есть, в целом, единственное гарантированное различие в возможности по-честному менять значение.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 08.09.2012, 09:37   #13
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Да, это так, но если мы попробуем её изменить, компилятор не сделает оптимизацию и она действительно будет существовать. То есть, в целом, единственное гарантированное различие в возможности по-честному менять значение.
Существовать будет. Но и оптимизации с её участием ещё как будут.
Компиль исходит из положения, что она - не изменяемая.
_Bers вне форума Ответить с цитированием
Старый 08.09.2012, 10:14   #14
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Но и оптимизации с её участием ещё как будут.
Можно сделать её volatile! :D
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 08.09.2012, 10:25   #15
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Можно сделать её volatile! :D
const size_t num = 10;

int a[num]; //о боже! Мы создали массив на 10 элементов!


... //тут мы хакнули константу

std::cout<<"num = "<<num<<std::endl; //о боже! Константа теперь равна 20!

int b[num]; //о боже! Мы создали массив на 10 элементов!

//ups...
_Bers вне форума Ответить с цитированием
Старый 08.09.2012, 10:31   #16
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Да, очень забавная ситуация) Но размер массива - не оптимизация, а вынужденное действие. А для изменения динамического значения volatile подойдет)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конфликт глобальных переменных RRt C/C++ Сетевое программирование 3 23.08.2012 22:51
Обнуление глобальных переменных в VBA Arkasha69 Microsoft Office Excel 1 06.09.2010 15:06
Правильное объявление глобальных переменных voam Microsoft Office Excel 5 14.05.2010 14:25
Два вопроса Никки Общие вопросы Delphi 2 19.01.2008 21:39
Два простых вопроса Relrin Общие вопросы Delphi 3 28.12.2007 16:00