小编use*_*722的帖子

MSVC++ 限制关键字和局部变量

我已经阅读了许多关于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);
}
Run Code Online (Sandbox Code Playgroud)

上面的例子是否违反了规则restrict

c++ strict-aliasing visual-c++ restrict-qualifier

5
推荐指数
1
解决办法
2064
查看次数