限制資格
如果我們有兩個相同型別的指標引數,編譯器不能做任何假設,並且總是必須假設對*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?
這可以證明是低效的,如果我們知道通過一些外部的資訊 e
和 f
永遠指向同一個資料物件。我們可以通過在指標引數中新增 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);
}
然後編譯器可能總是假設 e
和 f
指向不同的物件。