奇怪的C++语法

Arj*_*jun 8 c++ lambda visual-studio-2003 square-bracket visual-c++

我有8年的编码经验,但我从未见过运算符[]作为参数传递给函数定义.

例如,以下代码(来自开源项目):

bree::porder(m_root, [] (treenode* node) { delete node; }); 
Run Code Online (Sandbox Code Playgroud)

在我的编码生涯中,我总是定义[]为操作符重载程序,而不是参数.

那么这个新语法意味着什么呢?

我正在使用Visual Studio 2003附带的编译器.如何更改上面的代码以便在VS 2003中编译?

rer*_*run 16

这是一个c ++ lambda,你可以用相同定义的函数对象替换代码.该链接显示了两个使用Functor的示例和一个使用lambda的示例.


Rob*_*gar 5

它看起来像匿名函数C++ 0x语法


Mic*_*urr 5

正如其他答案所提到的,它是一种支持C++ 0x lambas的全新语法.在VS 2010之前的任何版本的Visual Studio中都不支持它,因此要使该代码段在VS 2003中工作,您需要重新调整代码以使用函数或仿函数对象.

我认为以下内容可能对您有用:

// somewhere where it would be syntactically valid to 
//  define a function
void treenode_deleter(treenode* node)
{
    delete node;
}


// ...

bree::porder(m_root, treenode_deleter); 
Run Code Online (Sandbox Code Playgroud)