C++ 自动返回值推断与c++;静态类型

C++ 自动返回值推断与c++;静态类型,c++,templates,types,generic-programming,C++,Templates,Types,Generic Programming,在这个非常有趣的自动返回值推断用例中(取自:): //一个查找至少两个值的通用函数 //返回类型是最小的变量类型 模板 自动findMin(A,B)->decltype(A

在这个非常有趣的自动返回值推断用例中(取自:):

//一个查找至少两个值的通用函数
//返回类型是最小的变量类型
模板
自动findMin(A,B)->decltype(A
返回值的类型是否必须在运行时推导,因为参数a和b不是可以在编译时计算的常量表达式?我的意思是,对于每个实例化的函数调用,返回值必须是A类型或B类型,但在编译时不清楚它是哪一个。a

这不是说C++是一种动态类型语言吗?如果不是,如何在编译时推导函数的返回值?每个实例化是否创建两个函数,一个返回类型,另一个返回B类型?这将如何工作?

您将得到一个函数,该函数返回一个通用类型的值,即
a
B
。C++是静态类型的语言,所以<代码> COND类型?a:b应该在编译时知道。有多种方法可以确定该公共类型。非正式地说,它是
a
B
可以隐式转换为的类型。如果不存在这样的类型,则会出现编译错误

比如说,

int    a = 1;
double b = 2;
auto   c = findMin(a, b);

c
的类型始终为
double
。如果
a
小于
b
,则返回值将
a
转换为
double
,就好像
static_-cast(a)

对于给定的
a
b
您将只有一个返回类型为
a
b
的函数。C++是一种静态类型语言。
cond的类型?a:b
总是在编译时根据确定。Geeksforgeks是一个不好的源代码,避免它!
的类型:是根据一些规则静态确定的(在编译时)。简而言之,编译器选择两个操作数都可以转换为的类型,并使用相同的类型,而不管条件的值是多少。@OS2我相信您指的是编译时,因为模板实例化不能在运行时发生,对吗?如果我错了,请纠正我,毕竟,这也是原始问题的一部分,调用哪个函数是在编译时确定的。模板不是虚拟的。当您使用模板或想知道编译器在做什么时,请使用此工具:
int    a = 1;
double b = 2;
auto   c = findMin(a, b);