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

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

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

const_cast: const и volatile - C++

20.03.2013, 20:00. Просмотров 633. Ответов 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$
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 20:00     const_cast: const и volatile
Посмотрите здесь:

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: делает содержимое массива или...

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++
void foo(const int N) { int Arr; //&lt;-- ??? } В clang это работает. В VisualStudio 2015 нет.

const_cast(*this) - C++
Пусть есть некий class Foo { ... }; std::wostream&amp; operator&lt;&lt; (std::wostream &amp;out, Foo &amp;obj) { // ... very-very many...

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

Не по теме:

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

xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.03.2013, 21:46  [ТС]     const_cast: const и volatile #4
Цитата Сообщение от diagon Посмотреть сообщение
Таки снимает.
А можно ещё один наглядный пример, но без c++11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 21:49     const_cast: const и volatile
Еще ссылки по теме:

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

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

const& и const* в имени функции - C++
Объясните пожалуйста что значит const&amp; и const* в имени и параметрах функции(пример из Вандевурд,Джосаттис): template &lt;typename T&gt; ...

Cannot convert 'const wchar_t *' to 'const char *' - C++
HMODULE hMod=GetModuleHandle(NULL); if(!hMod) { } HRSRC hRes=FindResource(hMod,&quot;acc.dll&quot;,RT_RCDATA); if(!hRes){ } HGLOBAL...


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

Или воспользуйтесь поиском по форуму:
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.03.2013, 21:49     const_cast: const и volatile #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
Yandex
Объявления
20.03.2013, 21:49     const_cast: const и volatile
Ответ Создать тему
Опции темы

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