大多数限制的定义都说它是程序员对编译器的承诺,在指针的生命周期中,指针是访问对象的唯一方式.这允许编译器优化输出,因为它知道它只能被一个指针访问,因此只能由它来改变.如果我理解正确通常意味着程序不必重新加载指针指向的值.
如果这是正确的,那么当restrict关键字应该可用时应该有一些例外,即使它违背了应该如何使用它的意图.
我想到的一件事是指针指向的数据在指针的生命周期内从未实际发生过变化.在这种情况下,即使指针指向同一位置也不需要重新加载数据,因为它们在指针的生命周期中不会改变.例如:
int max(int *restrict a, int *restrict b) {
return((*a > *b) ? *a : *b);
}
int main(void) {
int num = 3;
int max = max(&num, &num);
}
Run Code Online (Sandbox Code Playgroud)
这是对限制的有效使用,即使它与它应该如何使用相反吗?使用这样的restrict关键字会导致未定义的行为吗?