奇怪的赋值——匿名函数调用?

MPW*_*MPW 2 c++

这里的第一行到底是做什么的?我无法理解作业右侧代码的语法 - 具体来说,[]()和 尾随(). 这看起来像是某种无名的内联函数调用?我以前从未见过这个。

HBRUSH hBrBlack = []() { return CreateSolidBrush(COLOR_BLACK); }();
Run Code Online (Sandbox Code Playgroud)

对于上下文,这是使用上面句柄的地方(问题是关于上面的代码):

HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    if (nCtlColor == CTLCOLOR_LISTBOX)
    {
        int id(pWnd->GetDlgCtrlID());

        if (id == ID_LST_MTRS)
        {
            pDC->SetTextColor(COLOR_WHITE);
            pDC->SetBkColor(COLOR_BLACK);
            return hBrBlack;
        }
    }

    // All the rest
    return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
Run Code Online (Sandbox Code Playgroud)

0x5*_*453 5

[...](...){...}声明一个lambda 函数。然后尾随()立即调用该匿名函数。

这种模式通常称为IIFE(立即调用函数表达式)。如果我有一个需要多个步骤来构造/初始化的对象,但我希望该对象是const.

但是,在这种情况下,IIFE 似乎没有提供任何好处 - 您可以将其写为:

HBRUSH hBrBlack = CreateSolidBrush(COLOR_BLACK);