c++ - C++中方括号内的双点是什么意思

标签 c++ windows c++11

在文件C:\Program Files (x86)\Windows Kits\8.1\Include\um\OleAuto.h中,我发现了以下不知道如何解释的代码:

WINOLEAUTAPI SafeArrayAccessData(_In_ SAFEARRAY * psa,
_Outptr_result_buffer_(_Inexpressible_(psa->cbElements * 
product(psa->rgsabound[0..psa->cDims-1]->cElements))) 
void HUGEP** ppvData);

注意方括号内的双句点。这是 C++ 中的新运算符吗?

最佳答案

这似乎是一个 SAL 注释,用于告诉静态分析器缓冲区的大小太复杂,无法使用普通注释表示:

https://msdn.microsoft.com/en-us/library/jj159527.aspx

它不必包含有效的语法,但它包含的内容可能是为了简洁地向人类读者说明如何计算缓冲区的大小。

如果我自己解释它,我猜这意味着下面的代码会产生什么:

DWORD CalculateInexpressibleSafeArrayDataSize(SAFEARRAY * psa)
{
    DWORD cbSize = psa->cbElements;
    for (int i = 0; i < psa->cDims; i++) // product()
        cbSize *= psa->rgsabound[i]->cElements;
    return cbSize;
}

关于c++ - C++中方括号内的双点是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30651303/

相关文章:

c++ - OpenGL Shader 在 AMD 机器上不能正常工作

c++ - 在循环内使用 list.push_back(),绕过使迭代器无效

c++ - 在使用时以编程方式弹出 USB 设备

c++ - Qt 最小化任务栏图标鼠标事件

windows - 在 Windows 7 上的 Apache 2.4.23 上安装 mod_security2.so

c++ - 在模板中引用模板化函数

c++ ShellExecute "open"在已经打开的窗口中

c++ - 有什么方法可以在范围内重用标识符?

c++ - tellp() 是否未在追加模式下定义?

c++ - 为什么使用 popen() 读取时会出现内置延迟?