gpt4 book ai didi

c++ - 模板函数与具有自动参数的命名 lambda

转载 作者:可可西里 更新时间:2023-11-01 15:05:35 26 4
gpt4 key购买 nike

有什么区别

template <typename T> void func( T t ) { /* ... */ }

以及使用带自动参数的 lambda 的 C++14 替代方案?

auto func = []( auto t ) { /* ... */ }

应该首选哪一个?

最佳答案

第一个是函数模板。它可以专门化和重载。可以通过ADL找到。当您想要获取地址时,您必须显式为其提供模板参数,或者在编译器可以推断出它们的上下文中进行。

第二个,假设它出现在命名空间范围内,是一个带有模板函数调用运算符的全局对象。它不能专门化或重载(全局变量与函数冲突,它们不会重载它们)。无法通过ADL找到(ADL只能找到函数和函数模板)。如果你对它使用地址运算符,你会得到对象的地址,这是非常无用的。如果编译器可以推导出参数,则对象本身可以转换为函数指针;您不能明确提供它们。

你想用哪个就用哪个;只需了解任一选择的优缺点即可。我会推荐第一个。第二种的唯一优点是简洁,我希望在不久的将来我们也能获得函数模板的简洁语法。

auto func(auto t) { ... }

关于c++ - 模板函数与具有自动参数的命名 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17188485/

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