限制資格

如果我們有兩個相同型別的指標引數,編譯器不能做任何假設,並且總是必須假設對*e 的更改可能會改變*f

void fun(float* e, float* f) {
    float a = *f
    *e = 22;
    float b = *f;
    print("is %g equal to %g?\n", a, b);
}

float fval = 4;
float eval = 77;
 fun(&eval, &fval);

一切順利,等等

是 4 等於 4?

列印出來。如果我們傳遞相同的指標,程式仍然會做正確的事情並列印

是 4 等於 22?

這可以證明是低效的,如果我們知道通過一些外部的資訊 ef 永遠指向同一個資料物件。我們可以通過在指標引數中新增 restrict 限定符來反映這些知識:

void fan(float*restrict e, float*restrict f) {
    float a = *f
    *e = 22;
    float b = *f;
    print("is %g equal to %g?\n", a, b);
}

然後編譯器可能總是假設 ef 指向不同的物件。