Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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++ 多次调用lambda表达式_C++_C++11_Lambda - Fatal编程技术网

C++ 多次调用lambda表达式

C++ 多次调用lambda表达式,c++,c++11,lambda,C++,C++11,Lambda,我正在尝试新标准中的lambda表达式,但仍然不能很好地理解它们 假设我的代码中有一个lambda,例如在我的main中: int main( int argc, char * argv[]) { //some code [](int x, int y)->float { return static_cast<float>(x) / static_cast<float>(y); }; //some more c

我正在尝试新标准中的lambda表达式,但仍然不能很好地理解它们

假设我的代码中有一个lambda,例如在我的main中:

int main( int argc, char * argv[])
{
    //some code
    [](int x, int y)->float
    {
        return static_cast<float>(x) / static_cast<float>(y);
    };
    //some more code here
    //<---now I want to use my lambda-expression here
}
intmain(intargc,char*argv[])
{
//一些代码
[](整数x,整数y)->浮点
{
返回静态投影(x)/静态投影(y);
};
//这里有更多的代码
//
auto lambda=[](整数x,整数y)->float
{
返回静态投影(x)/静态投影(y);
};
//代码
//打电话给lambda

std::cout您可以使用
auto
存储lambda,或者显式地将其分配给兼容的
std::function

auto f1 = [](int x, int y)->float{ ..... };
std::function<float(int,int)> f2 = [](int x, int y)->float{ ..... };

float x = f1(3,4);
auto y = f2(5,6);

您的回答似乎暗示(可能不是有意的),第二种形式(使用
auto
)只是第一种形式(使用
std::function
)的简写。应该澄清的是,它们并不相同,第二种形式更好,不仅仅是因为它不太冗长,而是因为它不附带(在本例中)由于类型擦除,
std::function
带来了不必要的开销。@BenjaminLindley实际上这是故意的,尽管我意识到这可能是错误的。我认为
auto
必须解析为一个类型,我想在这种情况下它将是一个
std::function
。如果你能解释一下,我会的相应地修正我的答案。哦,对了。自动解析为类型当然是正确的。但在这种情况下,该类型是不可度量的。编译器将有一个内部使用的名称,如果您错误地使用lambda,您可能会看到。例如,GCC将给它一个类似
main()的名称:
如果lambda是在main中声明的。主要区别在于
std::function
是一个变量,它可以包含任何具有适当签名的函数、函数对象或lambda。而lambda变量只能包含一种类型,即lambda本身。@BenjaminLindley好的,我不知怎么搞混了这个问题。谢谢请解释一下。
auto f1 = [](int x, int y)->float{ ..... };
std::function<float(int,int)> f2 = [](int x, int y)->float{ ..... };

float x = f1(3,4);
auto y = f2(5,6);
std::function<float(int,int)> f3 = f1;