这是我写的一些代码(使用GCC对C++的__restrict__
扩展名):
#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;
}
或者,使用GCC(如果每个流行的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
)。我得到正确了吗?
附言:此程序中的限制不会更改任何内容。有或没有限制,编译器将生成相同的汇编代码。我写这个程序只是为了澄清事情,它不是
restrict
用法的一个很好的例子。您可以在这里看到restrict
用法的一个很好的例子:http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html 最佳答案
不。
声明书
*b = 8;
*c = 9;
会导致不确定的行为。
从文档中:
关于c++ - * restrict/* __ restrict__如何在C/C++中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8290666/