gpt4 book ai didi

c++ - 通用 lambda 和一元 + 运算符

转载 作者:太空宇宙 更新时间:2023-11-04 12:30:41 24 4
gpt4 key购买 nike

根据我的理解,lambda 表达式之前的 + 运算符将其解析为函数指针重载。 ( Post )

但是我不太明白为什么它不适用于通用 lambda。例如:

auto foo = +[](int a) { std::cout << "foo " << a << std::endl; };  // Valid

auto bar = +[](auto a) { std::cout << "bar " << a << std::endl; }; // Fails

// compiler error:
// no match for ‘operator+’ (operand type is ‘main()::<lambda(auto:1)>’)

这背后的直觉是什么?

Live example

最佳答案

所以,问题出在(auto a)。如果没有 lamda 会是什么样子?

那你应该写一个方法

void FuncFirst(int a) { std::cout << "foo " << a << std::endl; }

然后使用

auto foo = $FuncFirst;

所以,第二个例子看起来很奇怪:

void FuncSecond(auto a) { std::cout << "bar " << a << std::endl; } <-- So, how parameter can be "auto"? 

“自动”应该在编译期间解决。如果您将它发送给其他一些方法并使用不同的参数调用它会怎样?它有太多的不确定性。如果你想创建可以接受不同参数的方法,而不是你可以使用模板。 (或者你可以使用 int 吗?=))

关于c++ - 通用 lambda 和一元 + 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58760289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com