Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
#1

const_cast: const и volatile

20.03.2013, 20:00. Просмотров 689. Ответов 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 volatile
Пример из Шилдт Г. &quot;С++ Базовый курс (3-е издание, 2010)&quot; стр 205 const...

int const * const foo(const int* param) const - разъясните значение квалификаторов
int const * const foo(const int* param) const ...

int\ volatile int \ const int
Товарищи, паника! Имеется код: int a = 5; std::cout &lt;&lt; &quot;Init value a: &quot;...

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

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

4
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.03.2013, 20:39 #2
Лучший ответ Сообщение было отмечено как решение

Решение

Таки снимает.
Вы просто не понимаете фишки volatile, компилятор будет всегда проверять ее значение вне зависимости от всяких кастов.
3
Kastaneda
20.03.2013, 21:13
  #3

Не по теме:

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

0
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
20.03.2013, 21:46  [ТС] #4
Цитата Сообщение от diagon Посмотреть сообщение
Таки снимает.
А можно ещё один наглядный пример, но без c++11
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 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

Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения
const int Counter(const TSNum *Start) { int c=0; ...

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

Ошибка: Cannot convert 'char const[18]' to 'const wchar_t *'
Unit1.cpp(59): E2034 Cannot convert 'char const' to 'const wchar_t *' Full...


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

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

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