通用 Lambda 之间的区别
Difference between Generic Lambdas
我目前正在学习通用的 lambda 函数,我很好奇它们之间的区别:
[](auto x){};
和 []<typename T>(T x){};
他们都做同样的事情,但是一个比另一个快吗?拥有这两种语法有什么意义。
虽然两者在功能上是等价的,但它们是C++14和C++20的特性,即generic lambda和template syntax for generic lambdas,也就是说后者在 C++20 中 仅 格式正确。
相对于auto
可以接受any类型,后者可以让lambda接受特定的类型,例如:
[]<class T>(const std::vector<T>& x){};
此外,它还使lambda能够以更自然的形式转发参数:
[]<class... Args>(Args&&... args) {
return f(std::forward<Args>(args)...);
};
您可以通过原始论文了解更多细节P0428。
我目前正在学习通用的 lambda 函数,我很好奇它们之间的区别:
[](auto x){};
和 []<typename T>(T x){};
他们都做同样的事情,但是一个比另一个快吗?拥有这两种语法有什么意义。
虽然两者在功能上是等价的,但它们是C++14和C++20的特性,即generic lambda和template syntax for generic lambdas,也就是说后者在 C++20 中 仅 格式正确。
相对于auto
可以接受any类型,后者可以让lambda接受特定的类型,例如:
[]<class T>(const std::vector<T>& x){};
此外,它还使lambda能够以更自然的形式转发参数:
[]<class... Args>(Args&&... args) {
return f(std::forward<Args>(args)...);
};
您可以通过原始论文了解更多细节P0428。