MSVC++ 限制关键字和局部变量
MSVC++ restrict keyword and local variables
我已经阅读了许多关于restrict
关键字的文章。 但实际上,我能找到的每个示例似乎都只引用了一个函数的输入参数,也许是一个值。 我需要澄清我的理解。
我发现一个函数看起来完全违反了带有输入参数和局部变量的关键字规则。
调用此函数时void*
缓冲区,指针声明为 __restrict
(这是Microsoft视觉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++没有限制这样的关键字。此外,在您的示例中,有两个不同的词:__restrict 和 RESTRICT。我认为第一个词是实现定义的,第二个词表示宏。具有关键字限制的是 C。
相关文章:
- 使用的未初始化局部变量'Quick'
- 修复未初始化的局部变量错误
- 局部变量保留函数中的值
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- Gnuplot_i.hpp C++接口绘制局部变量而不是文件
- 如何在函数外部访问函数中局部变量的值?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++中静态方法的局部变量范围
- 未初始化的局部变量错误甚至认为我初始化了它(C++)
- 离开范围后如何保护局部变量的值?
- 局部变量名称冲突
- C++ lambda:如何'freeze'局部变量的值?
- 我应该使我的局部变量常量还是可移动的
- 获取具有静态局部变量的绑定/推断捕获 lambda 的函数指针
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 返回对局部变量 - C++ 的引用
- 是否可以影响 C++ 中回调函数的局部变量?
- 如何在 C++ 的 lambda 函数中传递同名的局部变量和参数(使用此关键字)?
- MSVC++ 限制关键字和局部变量