下面是一些代碼,我寫的(使用GCC的__restrict__
延伸到C++):* restrict/* __ restrict__如何在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;
}
或者,C版(如果C++版本尚不清楚由於使用的擴展,它每一個流行的C++編譯器支持),使用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;
}
從我讀過,如果我這樣做*a = 5
,它改變了他,a
,所指向的內存值;在那之後,他指向的內存不應該被除a
之外的其他人修改,這意味着這些程序是錯誤的,因爲b
和c
之後對它進行了修改。 或者,即使b
先修改了i
,之後只有a
才能訪問該內存(i
)。 我是否正確地得到它?
P.S:限制在這個程序中不會改變任何東西。有或沒有限制,編譯器將產生相同的彙編代碼。我寫這個程序只是爲了澄清事情,它不是restrict
用法的好例子。 restrict
使用的一個很好的例子,你可以在這裏看到:http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html
在C++中沒有'restrict';其他任何東西都是編譯器擴展。 –
[人類可以通過限定符限定符生成什麼?](http://stackoverflow.com/questions/1506794/what-can-human-beings-make-out-of-the-restrict-qualifier) –
@KerrekSB比在C中考慮這個程序,使用「restrict」,我問了C/C++ ......其中之一。 –