Может кто-нибудь объяснить мне, почему этот код работает? Я чувствую, что компилятор не должен позволять мне делать то, что я сделал (переместите указатель int, чтобы указать на const int), или, альтернативно, я бы ожидал, что вы увидите предупреждение компилятора или segfault. Идея изменить значение константы просто кажется неправильной.Увеличение константы в C++
Код:
#include <iostream>
using namespace std;
struct test_struct {
int i;
const int j;
};
int main() {
cout << "Create a struct with int i = 100 and const int j = 101." << endl;
test_struct test{100, 101};
cout << test.i << endl;
cout << test.j << endl;
cout << "Create pointer p and point it to int i." << endl;
int* p1 = &test.i;
cout << *p1 << endl;
cout << "Increment pointer p, which should now be pointing at const int j." << endl;
p1++;
cout << *p1 << endl;
cout << "Dereference p and increment it." << endl;
(*p1)++;
cout << *p1 << endl;
cout << test.j << endl;
}
Выход:
Create a struct with int i = 100 and const int j = 101.
100
101
Create pointer p and point it to int i.
100
Increment pointer p, which should now be pointing at const int j.
101
Dereference p and increment it.
102
102
какой компилятор вы используете? – Creris
Я использую компилятор g ++. – rolledback
Лучшим заголовком будет: изменение константы в структуре путем увеличения указателя на неконстантный член. – Csq