C99 引入了关键字 restrict 作为表示指针的函数参数的类型限定符。该限定符表示对参数所指向的对象的所有访问都通过该指针进行。编译器可以基于对象仅由解除引用该指针的代码进行修改这一知识进行优化。
此 C++ 语言扩展基于 https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Restricted-Pointers.html 中介绍的 gcc 扩展。关键字 __restrict 和 __restrict__(而不是 restrict)被识别为具有指针或引用类型的函数参数的类型限定符。也可以在非静态类成员函数上使用限定符,以指示类对象仅由 "this" 指针访问。
可以将任意数量的函数参数声明为受限参数。
这些关键字在所有编译器模式下都可识别。不按此处所述使用这些关键字会出错。
示例:
int f1(int* __restrict p1, int* __restrict p2); struct S { int f2() __restrict; };
在第一个示例中,程序员保证 p1 和 p2 指向函数未以任何其他方式引用的不同对象。在第二个示例中,"this" 指针被声明为受限指针,程序员保证仅使用 "this" 指针访问与函数关联的对象。
如果程序实际上未接受 __restrict 限定符隐含的保证,则程序结果不可预知。
仍会接受 –xrestrict 命令行选项。在源代码中使用 __restrict 关键字更为灵活,可能比命令行选项更为可取。
另请参见:–xrestrict[=f]