Aquí hay un código que escribí (usando __restrict__
extensión de GCC para C++):¿Cómo funciona * restrict/* __ restrict__ funciona en 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;
}
O, la versión C (en caso de que la versión C++ no es clara debido a la utilización de una extensión que cada C populares ++ compilador apoya), usando 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;
}
Por lo que he leído, si lo hago *a = 5
, cambia el valor de la memoria que, a
, está apuntando a; después de eso, la memoria a la que está apuntando no debería ser modificada por nadie más excepto a
, lo que significa que estos programas están equivocados porque b
y c
lo modifican después de eso. O, incluso si b
modifica i
primero, después de eso solo a
debería tener acceso a esa memoria (i
). ¿Lo estoy obteniendo correctamente?
P.S: Restringir en este programa no cambia nada. Con o sin restricción, el compilador producirá el mismo código de ensamblaje. Escribí este programa solo para aclarar las cosas, no es un buen ejemplo del uso de restrict
. Un buen ejemplo de restrict
uso se puede ver aquí: http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html
No hay 'restricción' en C++; cualquier otra cosa es una extensión de compilación. –
posible duplicado de [¿Qué pueden hacer los seres humanos con el calificador restringido?] (Http://stackoverflow.com/questions/1506794/what-can-human-beings-make-out-of-the-restrict-qualifier) –
@KerrekSB Considere este programa en C, usando "restringir", le pregunté a C/C++ ... Uno de ellos. –