这是我写的一些代码(使用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之外,其他任何人都不得修改他指向的内存,这意味着这些程序是错误的,因为bc在此之后对其进行了修改。
或者,即使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/

10-11 21:04