在这个非常有趣的自动返回值推断用例中(取自: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 < b ? a : b 不是常量表达式吗?
这是否意味着 c++ 是一种动态类型语言。如果不是,那么在编译时如何推导出函数的返回值?每个实例化是否创建两个函数,一个返回 A 类型,另一个返回 B 类型?这将如何运作?
最佳答案
您将得到一个返回常见类型 A
的值的函数。和B
。 C++ 是静态类型语言,因此 cond ? a : b
的类型应该在编译时就知道。有special rules以确定该常见类型。通俗地说,它是 A
的类型。和B
可以隐式转换为。如果不存在这样的类型,您将收到编译错误。
例如,
int a = 1;
double b = 2;
auto c = findMin(a, b);
c
的类型永远是double
。如果a
小于b
,返回值为a
转换为double
,就好像 static_cast<double>(a)
.
关于c++ - 自动返回值推断和 C++ 静态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63092955/