Ecco il codice che ho scritto (utilizzando __restrict__
estensione del GCC di C++):Come * limitt/* __ restrict__ funziona in 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;
}
Oppure, la versione C (nel caso in cui la versione C++ non è chiaro a causa dell'uso di una proroga, che ogni popolare compilatore C++ sostiene), utilizzando 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;
}
da quello che ho letto, se lo faccio *a = 5
, cambia il valore della memoria che, a
, sta puntando; dopo di che, la memoria a cui sta puntando non dovrebbe essere modificata da nessun altro eccetto a
, il che significa che questi programmi sono errati perché b
e c
lo modificano dopo. Oppure, anche se b
modifica prima i
, dopo che solo a
dovrebbe avere accesso a quella memoria (i
). Sto ottenendo correttamente?
P.S: La restrizione in questo programma non cambia nulla. Con o senza restrizioni, il compilatore produrrà lo stesso codice assembly. Ho scritto questo programma solo per chiarire le cose, non è un buon esempio di utilizzo di restrict
. Un buon esempio di utilizzo restrict
potete vedere qui: http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html
Non c'è 'restrict' in C++; qualsiasi altra cosa è un'estensione del compilatore. –
possibile duplicato di [Cosa possono fare gli esseri umani dal qualificatore restrittivo?] (Http://stackoverflow.com/questions/1506794/what-can-human-beings-make-out-of-the-restrict-qualifier) –
@KerrekSB Considerare questo programma in C, usando "restrict", ho chiesto a C/C++ ... Uno di questi. –