这个函数和lambda有什么区别? 我在C++中遇到了一个以上的情况,我复习了C++入门中的第103.2-10-3.3章,介绍了lambda表达式,但是它对我来说不起作用,我也对我最后一个注释表感到困惑。 #include<iostream> using namespace std; int* New() { return new int(666); } int Foo() { //method1: int* it = New(); return *it; //method2: return []() { return *(new int(666)); };//Complier has a complain here /*Both New() and Lambda are callable object, are there any differences between method1 and method2?*/ } int main() { cout << Foo() << endl; return 0; }

这个函数和lambda有什么区别? 我在C++中遇到了一个以上的情况,我复习了C++入门中的第103.2-10-3.3章,介绍了lambda表达式,但是它对我来说不起作用,我也对我最后一个注释表感到困惑。 #include<iostream> using namespace std; int* New() { return new int(666); } int Foo() { //method1: int* it = New(); return *it; //method2: return []() { return *(new int(666)); };//Complier has a complain here /*Both New() and Lambda are callable object, are there any differences between method1 and method2?*/ } int main() { cout << Foo() << endl; return 0; },c++,lambda,C++,Lambda,此行试图返回lambda本身。要调用lambda并返回它生成的整数: return []() { return *(new int(666)); }; 不过,定义lambda函数只是为了立即调用它,通常没有多大意义。当您需要实际返回函数或将函数作为参数时,它们更常用。不过,这是一个更高级的操作,所以您现在可能不必担心它 另请注意:您的程序使用new分配整数,但从不使用delete释放它们。这是一个你应该避免的问题 此行试图返回lambda本身。要调用lambda并返回它生成的整数: retur

此行试图返回lambda本身。要调用lambda并返回它生成的整数:

return []() { return *(new int(666)); };
不过,定义lambda函数只是为了立即调用它,通常没有多大意义。当您需要实际返回函数或将函数作为参数时,它们更常用。不过,这是一个更高级的操作,所以您现在可能不必担心它

另请注意:您的程序使用new分配整数,但从不使用delete释放它们。这是一个你应该避免的问题

此行试图返回lambda本身。要调用lambda并返回它生成的整数:

return []() { return *(new int(666)); };
不过,定义lambda函数只是为了立即调用它,通常没有多大意义。当您需要实际返回函数或将函数作为参数时,它们更常用。不过,这是一个更高级的操作,所以您现在可能不必担心它


另请注意:您的程序使用new分配整数,但从不使用delete释放它们。这是一个,这是你应该避免的。

实际上,我没有给我的lambda打电话,因为它没有呼叫接线员。 因此,我将其修正为:

return []() { return *(new int(666)); }();  // Note the () at the end
现在可以了


<>我复习了C++中的第103.2章中的单词,我们用调用操作符把函数称为lambda。

Stand,我没有调用LAMBDA,因为它缺少调用算子。 因此,我将其修正为:

return []() { return *(new int(666)); }();  // Note the () at the end
现在可以了


我复习了C++中的第10章第3.3.2章中的单词,我们用调用操作符把函数称为lambda。< /p>你称为新。你没有给兰姆达打电话。另外,C不是C++。而且,你泄露了你分配的所有东西。这里我的意思是如果我选择方法,我会擦除方法1。你能告诉我更多的细节吗?@Ryan,编译器给我的一个错误是:lambda[]int->int到int没有这样的可转换函数。你没有调用lambda。你调用了New。你没有给兰姆达打电话。另外,C不是C++。而且,你泄露了你分配的所有东西。这里我的意思是如果我选择方法,我会擦除方法1。你能告诉我更多的细节吗?@Ryan,编译器给我的一个错误是:lambda[]int->int到int之间没有这样的可转换函数。你没有调用lambda。非常感谢,我只是匆匆忙忙地写了这个小实例,我会更加关注你的笔记。非常感谢,我只是匆匆忙忙地写了这个小实例,我会更加关注你的笔记。