199 votes

Que signifie le mot-clé restrict en C++ ?

J’étais toujours incertain, que le mot-clé restrict signifie en C++ ?

Cela signifie deux ou plus pointeur donnée à la fonction ne se chevauche pas ? Quoi que cela signifie ?

149voto

Robert S. Barnes Points 17244

Dans son livre, l'Optimisation de la Mémoire, Christer Ericsson dit que, en restrict ne fait pas partie de la norme C++ encore, qu'il est soutenu par de nombreux compilateurs et il recommande de l'utiliser lorsqu'elle est disponible:

restreindre mot-clé

! Nouveau à 1999 ANSI/ISO C standard

! Pas en C++ standard, mais pris en charge par de nombreux compilateurs C++

! Un conseil, donc peut ne rien faire et à toujours être conforme

Restreindre l'qualifiés pointeur (ou une référence)...

! ...est en fait un promesse au compilateur que pour la la portée du pointeur, la cible du pointeur de la souris uniquement être accessible par le pointeur (et des pointeurs copié à partir d'elle).

Dans les compilateurs C++ qui le prennent en charge, il devrait probablement se comportent de la même comme en C.

Voir cette SORTE de post pour plus de détails: Réaliste de l'utilisation du C99 "limiter" mot?

Prendre une demi-heure à parcourir Ericson papier, c'est intéressant et vaut à la fois.

Modifier

J'ai aussi trouvé que IBM AIX compilateur C/C++ prend en charge l' __restrict__ mot-clé.

g++ semble également à l'appui de ce que le programme suivant compile correctement sur g++:

#include <stdio.h>

int foo(int * __restrict__ a, int * __restrict__ b) {
    return *a + *b;
}

int main(void) {
    int a = 1, b = 1, c;

    c = foo(&a, &b);

    printf("c == %d\n", c);

    return 0;
}

J'ai aussi trouvé un article intéressant sur l'utilisation de l' restrict:

Démystifier La Restreindre Mot-Clé

Edit2

J'ai couru à travers un article qui aborde spécifiquement l'utilisation de restreindre dans les programmes C++:

De charge de frapper les magasins et de l' __restreindre mot-clé

Aussi, Microsoft Visual C++ prend également en charge l' __restrict mot-clé.

22voto

dirkgently Points 56879

Rien. Il a été ajouté à la norme C99.

12voto

unwind Points 181987

Cette est la proposition initiale d’ajouter ce mot-clé. Comme dirkgently fait remarquer, cependant, il s’agit d’une fonctionnalité de C99 , cela n’a rien à voir avec C++.

4voto

AndreyT Points 139512

En C++, il n’y a pas de mot clé. Liste des mots clés C++ se trouvent dans la section 2.11/1 du langage C++ standard. ``est un mot clé dans la version de C99 du langage C, mais en C++.

4voto

bohan Points 522

Étant donné que les fichiers d’en-tête de certaines bibliothèques C utilisent le mot clé, le langage C++ devra faire quelque chose... au minimum, en ignorant le mot clé, donc nous ne devons #define le mot-clé à une macro vide pour supprimer le mot clé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X