Имеется следующий код:
Как видно, я пытался изменить переменную
И я это сделал. Или нет? Ни g++, ни clang, ни VS компиляторы на меня не ругались, но, тем не менее, вышла непонятка:
Вот, собственно, что меня интересует:
1. Можно ли так делать? ( Косвенно изменять const-переменную )
2. Если нет, то почему. ( В том смысле, что как описывает такое поведение стандарт и говорится ли в нем что-то об этом? )
3. Почему значения
Изменение переменной с квалификатором const
:
#include <iostream>
int main()
{
using namespace std;
cout << left;
const int var = 10;
cout.width( 10 );
cout << "var = " << var << '\n';
int* p_var = const_cast< int* >( &var );
cout.width( 10 );
cout << "*p_var = " << *p_var << "\n~~~~\n";
*p_var = -42; // ???
cout.width( 10 );
cout << "var = " << var << '\n';
cout.width( 10 );
cout << "*p_var = " << *p_var << endl;
}
Как видно, я пытался изменить переменную
var
через указатель p_var
.И я это сделал. Или нет? Ни g++, ни clang, ни VS компиляторы на меня не ругались, но, тем не менее, вышла непонятка:
Цитата:
Output: var = 10 *p_var = 10 ~~~~ var = 10 *p_var = -42 |
1. Можно ли так делать? ( Косвенно изменять const-переменную )
2. Если нет, то почему. ( В том смысле, что как описывает такое поведение стандарт и говорится ли в нем что-то об этом? )
3. Почему значения
var
и *p_var
были разными?