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

const_cast: const и volatile - C++

Восстановить пароль Регистрация
 
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.03.2013, 20:00     const_cast: const и volatile #1
Как известно 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_cast C++
C++ const volatile
C++ int\ volatile int \ const int
char operator[](unsigned short offset) const; // что означает const? C++
C++ Что это bool operator== (const CLASS&) const;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.03.2013, 21:46  [ТС]     const_cast: const и volatile #4
Цитата Сообщение от diagon Посмотреть сообщение
Таки снимает.
А можно ещё один наглядный пример, но без c++11
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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
Ответ Создать тему
Опции темы

Текущее время: 20:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru