Подтвердить что ты не робот

В чем смысл двойной точки внутри квадратной скобки в С++

В файле 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);

Обратите внимание на двойной период в квадратных скобках. Это новый оператор в С++?

4b9b3361

Ответ 1

Кажется, это аннотация 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;
}