Modyfikator const w C oraz C++

0

Kompilując ten sam kod korzystając z MinGW programami gcc oraz g++ uzysujemy różne efekty.

 
#include <stdio.h>
int main(void)
{
	const int a = 1;
	int * c = (int *) & a;
	* c = 2;
	printf("& a = %p; c = %p\n", & a, c);
	printf("a = %d; * c = %d\n", a, * c);
	return 0;
}
Przykładowy efekt dla C++:
& a = 0028FEE8; c = 0028FEE8
a = 1; * c = 2
 
I dla C:
 
& a = 0028FF18; c = 0028FF18
a = 2; * c = 2
Dlaczego tak się dzieje? Gdzie wartość spod wskaźnika c jest przechowywana? Przecież obydwa obiekty wskazują na ten sam obszar pamięci.
1

[7.1.6.1/4] Except that any class member declared mutable (7.1.1) can be modified, any attempt to modify a const object during its lifetime (3.8) results in undefined behavior.

Bo jak deklarujesz coś jako const to kompilator ma prawo wrzucić to w obszar pamięci nie-do-modyfikacji. Równie dobrze mogło ci to wysypać program.

1 użytkowników online, w tym zalogowanych: 0, gości: 1