C++11 在C++;11?

C++11 在C++;11?,c++11,lambda,function-pointers,C++11,Lambda,Function Pointers,lambda函数可以内联到源代码中。它们有助于将这些过程作为参数传递给其他模块。但是,这也可以通过函数指针实现。在C++11中,关于什么时候应该选择lambda而不是函数指针,有什么好的实践或经验法则吗?如果lambda表达式超过几行(三行?),那么最好从中生成一个函数。如果lambda表达式超过几行(三行?)用它来构造函数可能很好。lambda表达式可以捕获变量,创建一个包含相关数据的闭包类型。不能将数据绑定到函数指针,函数只能对其参数和全局数据进行操作。lambda表达式可以捕获变量,从而创

lambda函数可以内联到源代码中。它们有助于将这些过程作为参数传递给其他模块。但是,这也可以通过函数指针实现。在C++11中,关于什么时候应该选择lambda而不是函数指针,有什么好的实践或经验法则吗?

如果lambda表达式超过几行(三行?),那么最好从中生成一个函数。

如果lambda表达式超过几行(三行?)用它来构造函数可能很好。

lambda表达式可以捕获变量,创建一个包含相关数据的闭包类型。不能将数据绑定到函数指针,函数只能对其参数和全局数据进行操作。

lambda表达式可以捕获变量,从而创建一个包含相关数据的闭包类型。无法将数据绑定到函数指针,函数只能对其参数和全局数据进行操作。

选择lambda表达式而不是函数指针。

我认为你不应该选择函数指针。相反,在C++11中有函数对象和lambda,lambda被视为匿名本地函数对象(尽管没有两个lambda表达式相等;它们没有返回类型;它们是闭包类型)

我认为它们是C++支持的C语言的技术遗产。除非您正在使用C或遗留代码,否则您最好考虑不要太注意函数指针。

  • 指向函数的指针可以强制转换为指向函数类型的不同指针

  • lambda可以访问其作用域的变量,您可以在捕获列表中指定这些变量

  • lambda可以比调用者的寿命长(将lambda传递给不同的线程,或存储以供以后使用)。当不适当地捕获局部变量(即通过引用)时,这可能是一个问题
  • lambda的参数列表可以省略。即,最短λ为
    []{}
  • lambda表达式的返回类型可以从其主体中推导出来
小尺寸且仅使用一次时:lambda

不小或重复使用时:函数对象选择lambda表达式而不是函数指针。

我认为你不应该选择函数指针。相反,在C++11中有函数对象和lambda,lambda被视为匿名本地函数对象(尽管没有两个lambda表达式相等;它们没有返回类型;它们是闭包类型)

我认为它们是C++支持的C语言的技术遗产。除非您正在使用C或遗留代码,否则您最好考虑不要太注意函数指针。

  • 指向函数的指针可以强制转换为指向函数类型的不同指针

  • lambda可以访问其作用域的变量,您可以在捕获列表中指定这些变量

  • lambda可以比调用者的寿命长(将lambda传递给不同的线程,或存储以供以后使用)。当不适当地捕获局部变量(即通过引用)时,这可能是一个问题
  • lambda的参数列表可以省略。即,最短λ为
    []{}
  • lambda表达式的返回类型可以从其主体中推导出来
小尺寸且仅使用一次时:lambda

当不小或重复使用时:function object

您可以举个例子吗?是否有一个理由,你没有考虑问题的功能对象(或函子)?“Eelyasin我没有例子,因为我打算这是一个普遍的问题。还有什么第二个问题,如果我可以问?”@ Elyasin:我想保持这个问题尽可能简单和直截了当。我明白。不过我在回答中提到了函数对象(函子)。考虑一下这些,你有个例子吗?是否有一个理由,你没有考虑问题的功能对象(或函子)?“Eelyasin我没有例子,因为我打算这是一个普遍的问题。还有什么第二个问题,如果我可以问?”@ Elyasin:我想保持这个问题尽可能简单和直截了当。我明白。不过我在回答中提到了函数对象(函子)。考虑一下这些。对于一个跳转表,你会使用一个数组:<代码> STD::函数< /> >而不是函数指针数组?对于类型擦除,您需要将所有操作存储在
std::function
s?您将如何实现std::function的move-only变体?对于日常使用,我同意你的想法:但将函数指针视为技术遗产只是。。。太多了。也许你是对的;在那种情况下,我不太清楚。我想我会看看指向函数成员的指针是否有用。如果我必须进行设计,我可能会这样做。那么,对于跳转表,您会使用
std::function
数组而不是函数指针数组?对于类型擦除,您需要将所有操作存储在
std::function
s?您将如何实现std::function的move-only变体?对于日常使用,我同意你的想法:但将函数指针视为技术遗产只是。。。太多了。也许你是对的;在那种情况下,我不太清楚。我想我会看看指向函数成员的指针是否有用。如果非要我设计的话,我可能会这么做。