首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动返回值推理与c++静态类型

自动返回值推理与c++静态类型
EN

Stack Overflow用户
提问于 2020-07-25 19:56:44
回答 1查看 118关注 0票数 2

在这个非常有趣的自动返回值推断用例中(取自:https://www.geeksforgeeks.org/type-inference-in-c-auto-and-decltype/ ):

代码语言:javascript
复制
// A generic function which finds minimum of two values 
// return type is type of variable which is minimum 
template <class A, class B>
auto findMin(A a, B b) -> decltype(a < b ? a : b)
{
    return (a < b) ? a : b;
}

因为参数a和b不是可以在编译时计算的常量表达式,所以不需要在运行时推导返回值的类型吗?我的意思是,对于每个实例化函数调用,返回值必须是A类型或B类型,但是在编译时不清楚它是哪一种类型。A

这并不意味着c++是一种动态类型的语言。如果不是,如何在编译时推导函数的返回值?每个实例化是否创建了两个函数,一个返回A类型,另一个返回B类型?那该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-25 20:33:20

您将得到一个返回公共类型的AB值的函数。C++是一种静态类型的语言,所以在编译时应该知道cond ? a : b的类型。有特殊规则来确定该公共类型。非正式地说,它是一种AB可以隐式转换的类型。如果不存在这样的类型,您将得到一个编译错误。

例如,

代码语言:javascript
复制
int    a = 1;
double b = 2;
auto   c = findMin(a, b);

c的类型总是double。如果a小于b,则返回值将被a转换为double,就像static_cast<double>(a)一样。

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

https://stackoverflow.com/questions/63092955

复制
相关文章

相似问题

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