Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是;[这]”;以C+表示的平均值+;_C++_Api_C++11_Syntax_Cocos2d X - Fatal编程技术网

C++ 什么是;[这]”;以C+表示的平均值+;

C++ 什么是;[这]”;以C+表示的平均值+;,c++,api,c++11,syntax,cocos2d-x,C++,Api,C++11,Syntax,Cocos2d X,当我阅读CoCoCos2DX 3.0API时,我发现如下内容: auto listener = [this](Event* event){ auto keyboardEvent = static_cast<EventKeyboard*>(event); if (keyboardEvent->_isPressed) { if (onKeyPressed != nullptr) onKeyPressed(keyboar

当我阅读
CoCoCos2DX 3.0
API时,我发现如下内容:

auto listener = [this](Event* event){
    auto keyboardEvent = static_cast<EventKeyboard*>(event);
    if (keyboardEvent->_isPressed)
    {
        if (onKeyPressed != nullptr)
            onKeyPressed(keyboardEvent->_keyCode, event);
    }
    else
    {
        if (onKeyReleased != nullptr)
            onKeyReleased(keyboardEvent->_keyCode, event);
    }
};
autolistener=[this](事件*事件){
自动键盘事件=静态播放(事件);
如果(键盘事件->已按下)
{
如果(按onKeyPressed!=nullptr)
onKeyPressed(键盘事件->按键代码,事件);
}
其他的
{
如果(onKeyReleased!=nullptr)
onKeyReleased(键盘事件->键盘代码,事件);
}
};
这是什么意思?这是
C++11
中的新语法吗

这意味着什么

它引入了一个-a可调用函数对象。将
this
放在括号中意味着lambda捕获
this
,以便该对象的成员在其中可用。lambda还可以通过值或引用捕获局部变量,如链接页面中所述

lambda的重载为
操作符()
,因此可以像调用函数一样调用它:

Event * event = some_event();
listener(event);
它将运行lambda主体中定义的代码

这是C++11中的新语法吗


是的。

这是一个lambda,您正在将当前实例绑定到它。这意味着您捕获了
。明确提及
真的有意义吗?对
onKeyPressed
onkeypreleased
的引用不会自动捕获它(假设它们是
的成员)。还有一个警告,
keyboardEvent
现在保存着该
指针的副本。。。如果
keyboardEvent
能够比这
指向的任何东西都活得长,那你就惨了。。。。(标准对象生存期问题)所有具有[](){}形式的东西都是lambda(是的,这是C++11的新特性)。使用
auto
关键字和空指针文本
nullptr
的自动类型推断也是C++11。我不想成为PIA,如果术语“重载
运算符()
”我真的很感兴趣技术上正确吗?我知道
ClosureType
是一个类型,并且有一个成员函数
operator()
,但我认为它在任何时候都没有重载,或者是吗?@luk32它重载内置运算符,就像用户声明的运算符重载一样。好吧,可能是当我们谈论一个只能声明为类的方法的运算符时,不是“重载”的,因为默认情况下它决不是为该类定义的。然而,对于运营商来说,人们普遍认为他们正在“过载”,因为人们总是说其他地方已经定义了任何可调用的东西。结果,每个运算符定义都是“重载”。