我读过了关于restrict关键字的许多帖子。但实际上,我可以找到的每个示例似乎都只将输入参数引用到函数中,也许只是一个值。我需要澄清我的理解。MSVC++限制关键字和局部变量
我发现一个函数看起来像是完全违反了输入参数和局部变量的关键字规则。
该函数用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);
}
是否上面的例子中违反“限制”的规则?
编辑过的标题和标签,因为这通常不适用于C++,只是一个供应商的扩展。 – aschepler
为什么你把它标记为MSVC?微软在MSDN官方表示,他们甚至不支持restrict关键字(无论是c还是C++) – dhein