gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:25 26 4
gpt4 key购买 nike

我已经阅读了很多关于 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的规则?

最佳答案

restrict 关键字仅表示指针应指向内存的唯一部分。在上面的代码中,pBuffer 指向了一个东西,我们称它为A,pBufferPtr 指向了A+10,PData 指向了一个完全不同的东西, B,所以没有违规。

关于c++ - MSVC++ 限制关键字和局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19391960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com