Oto kod pisałem (przy użyciu GCC __restrict__
rozszerzenie C++):W jaki sposób * limit/* __ restrict__ działa w C/C++?
#include <iostream>
using namespace std;
int main(void) {
int i = 7;
int *__restrict__ a = &i;
*a = 5;
int *b = &i, *c = &i;
*b = 8;
*c = 9;
cout << **&a << endl; // *a - which prints 9 in this case
return 0;
}
Lub wersja C (w przypadku wersji C++ nie jest jasne, dzięki zastosowaniu przedłużenia których każdy popularny kompilator C++ obsługuje), przy użyciu GCC:
#include <stdio.h>
int main(void) {
int i = 7;
int *restrict a = &i;
*a = 5;
int *b = &i, *c = &i;
*b = 8;
*c = 9;
printf("%d \n", **&a); // *a - which prints 9 in this case
return 0;
}
z tego co czytałem, jeśli robię *a = 5
, zmienia wartość pamięci on a
jest wskazując; potem pamięć, do której wskazuje, nie powinna być modyfikowana przez nikogo poza wyjątkiem a
, co oznacza, że programy te są błędne, ponieważ zmieniają je po tym, b
i c
. Lub, nawet jeśli b
modyfikuje najpierw i
, po tym tylko a
powinien mieć dostęp do tej pamięci (i
). Czy otrzymuję poprawnie?
P.S: Ograniczenie w tym programie nic nie zmienia. Z ograniczeniem lub bez niego kompilator wygeneruje ten sam kod zespołu. Napisałem ten program tylko po to, aby wyjaśnić pewne rzeczy, nie jest to dobry przykład użycia numeru restrict
. Dobrym przykładem restrict
użycia można zobaczyć tutaj: http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html
Nie ma "ograniczenia" w C++; cokolwiek innego jest rozszerzeniem kompilatora. –
możliwy duplikat [Co mogą ludzie zrobić z ograniczającego kwalifikatora?] (Http://stackoverflow.com/questions/1506794/what-can-human-beings-make-out-tre-restrict-qualifier) –
@KerrekSB Niż za ten program w C, używając "ograniczenia", zapytałem C/C++ ... Jeden z nich. –