首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内嵌Lambda变量与内联函数和内联模板函数的自动类型推导

内嵌Lambda变量与内联函数和内联模板函数的自动类型推导
EN

Stack Overflow用户
提问于 2021-08-07 10:24:23
回答 1查看 212关注 0票数 1

假设我想声明一个内联函数,它将接受任意类型的参数。我认为可以通过以下方法来做到这一点。

代码语言:javascript
复制
//////
inline auto const myfunc = [&](const auto& val){return something(val);};
//////
inline auto myfunc(const auto& val)
{
    return something(val);
}
//////
template<class T>
inline T myfunc(const T& val)
{
    return something(val);    
}

所以我有几个问题。

我的定义中是否有任何错误,这些定义supported?

  • Does中的任何一种定义都比另一种定义有什么优势吗?如果是的话,这些定义中的哪种advantages?

  • Which在代码质量方面更好?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-07 10:28:57

它们都定义了一些与众不同的东西。因此,对2的回答是:选择一个做你想做的事情。1)我会告诉你的,因为你可以很容易地试一试,看看它们是否编译。( 3)不相关吗,因为在两者之间做出选择是你真正需要的,而不是风格的问题。

代码语言:javascript
复制
inline auto const myfunc = [&](const auto& val){return something(val);};

lambda myfunc是一些未命名的类型,具有模板化的operator()myfunc本身没有模板化。您可以将myfunc传递给其他函数,因为它是一个对象。对另外两个人来说,你不能轻易做到这一点。

之间的区别

代码语言:javascript
复制
inline auto myfunc(const auto& val)
{
    return something(val);
}

代码语言:javascript
复制
template<class T>
inline T myfunc(const T& val)
{
    return something(val);    
}

是返回类型。对于第二个类型,返回类型是TT要么是从参数推导出来的,要么是您显式地指定它,然后它可以与传递的参数不同,只要参数可以转换为const T&。因此,第一个更类似于lambda (更准确地说,是它的operator()),因为返回类型是从something(val)推导出来的,尽管lambda还通过&捕获。对于函数来说,这样做是不容易的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68691471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档