在这个非常有趣的自动返回值推断用例中(取自:https://www.geeksforgeeks.org/type-inference-in-c-auto-and-decltype/ ):
// 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类型?那该怎么做?
发布于 2020-07-25 20:33:20
您将得到一个返回公共类型的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<double>(a)一样。
https://stackoverflow.com/questions/63092955
复制相似问题