我已经阅读了许多关于restrict
关键字的帖子。但几乎我能找到的每个示例似乎都只将输入参数引用到一个函数,也许是一个值。我需要澄清我的理解。
我发现一个函数看起来完全违反了带有输入参数和局部变量的关键字规则。
这个函数被调用void*
到一个缓冲区并且指针被声明为__restrict
(这是Microsoft Visual C++)。然而,在函数的后面,UCHAR*
声明了一个类型的局部变量指针,并使其指向相同的受限输入参数缓冲区。
这是我正在谈论的功能的一个严重削减的版本:
void Foo(int nVersion, int nX, int nY, int nWidth, void * __restrict pBuffer) const
{
// ... blah blah blah
UCHAR * __restrict pBufferPtr = ((UCHAR *) pBuffer) + 10; // Isn't this aliasing?
const void * __restrict pData = (blah blah blah); //... Get from some function call;
memcpy(pBufferPtr, pData, nWidth);
}
上面的例子是否违反了规则restrict
?