Quantcast
Channel: Форум программистов и сисадминов Киберфорум
Viewing all articles
Browse latest Browse all 514886

Изменение const-переменной - С++ для начинающих

$
0
0
Имеется следующий код:
Изменение переменной с квалификатором 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 были разными?

Viewing all articles
Browse latest Browse all 514886

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>