我总是不确定,在C++中,restrict关键字是什么意思?
是否意味着赋予函数的两个或更多指针不重叠?还有什么意思?
我正在浏览一些文档和问题/答案,并看到它提到.我读了一个简短的描述,声明它基本上是程序员的承诺,指针不会用于指向其他地方.
任何人都可以提供一些现实案例,其值得实际使用吗?
如何(在GCC /"GNU C"中)声明一个指向函数的函数指针__attribute__((const))
?我的想法是,我希望编译器在可以缓存前一次调用的返回值时,避免生成对通过函数指针调用的函数的多次调用.
大多数限制的定义都说它是程序员对编译器的承诺,在指针的生命周期中,指针是访问对象的唯一方式.这允许编译器优化输出,因为它知道它只能被一个指针访问,因此只能由它来改变.如果我理解正确通常意味着程序不必重新加载指针指向的值.
如果这是正确的,那么当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关键字会导致未定义的行为吗?