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

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

Войти
Регистрация
Восстановить пароль
 
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

const_cast: const и volatile - C++

20.03.2013, 20:00. Просмотров 655. Ответов 4
Метки нет (Все метки)

Как известно const_cast сбрасывает наложенные ограничения при помощи модификаторов const и volatile. Как мне стало известно volatile - запрет компилятора на оптимизацию кода под область памяти помеченной этим модификатором. Но как видно в следующем коде, что применение оператора const_cast снимает ограничение исключительно модификатора const, иначе теоретически, компилятор бы оптимизировал код таким образом, что параметр переменная i не смогла бы изменить своё значение.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
    volatile const int i = 5;
    int& link = const_cast<int&>(i);
 
    link = 10; 
 
    std::cout << "i=" << i << '\n'
        << "link=" << link << '\n';
}
Если кто-то в курсе в чём дело, изложите ваши мысли по этому поводу.

Добавлено через 3 минуты
как видно по результату сбрасывается модификтор const, но не volatile
Bash
1
2
3
4
ilyuha21st@coldshoot:~/Projects$ ./prog
i=10
link=10
ilyuha21st@coldshoot:~/Projects$
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
    const int i = 5;
    int& link = const_cast<int&>(i);
 
    link = 10; 
 
    std::cout << "i=" << i << '\n'
        << "link=" << link << '\n';
}
здесь всё верно
Bash
1
2
3
4
ilyuha21st@coldshoot:~/Projects$ ./prog
i=5
link=10
ilyuha21st@coldshoot:~/Projects$
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 20:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос const_cast: const и volatile (C++):

const volatile - C++
Пример из Шилдт Г. &quot;С++ Базовый курс (3-е издание, 2010)&quot; стр 205 const volatile unsigned char *port = (const volatile char *)...

int const * const foo(const int* param) const - разъясните значение квалификаторов - C++
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ? 2: делает содержимое массива или...

int\ volatile int \ const int - C++
Товарищи, паника! Имеется код: int a = 5; std::cout &lt;&lt; &quot;Init value a: &quot; &lt;&lt; a &lt;&lt; &quot;\n&quot;; int *p; p = (int*) &amp;a; *p = 0; ...

char operator[](unsigned short offset) const; // что означает const? - C++
Собстенно вопрос уже озвучен :).

Что это bool operator== (const CLASS&) const; - C++
Что это? class CLASS { public: bool operator== (const CLASS&amp;) const; ...

Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения - C++
const int Counter(const TSNum *Start) { int c=0; while(Start!=NULL){Start=Start-&gt;next;} return c; } Функция...

4
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.03.2013, 20:39 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Таки снимает.
Вы просто не понимаете фишки volatile, компилятор будет всегда проверять ее значение вне зависимости от всяких кастов.
3
Kastaneda
20.03.2013, 21:13
  #3

Не по теме:

Цитата Сообщение от diagon Посмотреть сообщение
Таки снимает.
хороший пример, для наглядности можно строку сделать по длинее, типа "Hello".

0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.03.2013, 21:46  [ТС] #4
Цитата Сообщение от diagon Посмотреть сообщение
Таки снимает.
А можно ещё один наглядный пример, но без c++11
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.03.2013, 21:49 #5
Цитата Сообщение от xtorne21st Посмотреть сообщение
А можно ещё один наглядный пример, но без c++11
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
   volatile char *str( (char *) "0" );
   std::cout << str << std::endl;
   std::cout << const_cast<char*> (str) << std::endl;
}
Вот. С++03
Вывод тот же самый.
Объяснение где-то тут - [Задача] const volatile
1
20.03.2013, 21:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 21:49
Привет! Вот еще темы с ответами:

Ошибка: Cannot convert 'char const[18]' to 'const wchar_t *' - C++
Unit1.cpp(59): E2034 Cannot convert 'char const' to 'const wchar_t *' Full parser context Unit1.cpp(55): parsing: void _fastcall...

Модификатор const для параметра функции не const? - C++
void foo(const int N) { int Arr; //&lt;-- ??? } В clang это работает. В VisualStudio 2015 нет.

Const_cast ub - C++
в каком-то видео для новичков увидел классный код такого плана const int x = 42; const_cast&lt;int&amp;&gt;(x) = 666; ведет ли такой...

const_cast - C++
День добрый. Пытаюсь вот разобраться как работает данный оператор. Имеется пример: #include &lt;iostream&gt; int main() { const...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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