在文件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/

10-11 00:32