我对此有一个大致的了解,restrict
但我希望能澄清一些要点。我有一个函数,它从一个缓冲区读取一个以空字符结尾的字符串,并在另一个缓冲区中写出一个 URL 编码版本。该函数有这个签名(目前没有restrict
):
char const *StringUrlEncode(char const *unencoded,
char *encoded,
char *encodedEnd);
unencoded
是我的以 null 结尾的源字符串。目标缓冲区由encoded
and表示encodedEnd
,其中encoded
指向缓冲区中的第一个字符char
并encodedEnd
指向缓冲区之后的第一个字符,即该函数将char
s 写入但不包括指向的位置encodedEnd
- 这是您的基本begin
/end
迭代器如果您熟悉 C++ STL 约定,请配对。
如果我添加restrict
到这个函数,它应该只应用于前两个参数:
char const *StringUrlEncode(char const *restrict unencoded,
char *restrict encoded,
char *encodedEnd);
或者将它添加到所有三个参数中是否有一些我不理解的好处?
我可以看到制作输入和输出缓冲区restrict
有助于编译器知道它们不重叠。但由于最后一个参数 ,encodedEnd
仅用于标记输出缓冲区的结束,我认为这restrict
对编译器没有任何帮助(尽管我认为它不会伤害,除了增加不必要的噪音到函数声明)。