【发布时间】:2012-01-01 23:14:33
【问题描述】:
我正在阅读 cpp-next,其中这个 min 模板是作为如何将冗长的 C++ 代码与 python 代码进行比较的示例
template <class T, class U>
auto min(T x, U y)->decltype(x < y ? x : y)
{ return x < y ? x : y; }
起初这看起来很无辜,但 Daveed Vandevoorde 说了这句话
在其返回类型规范中使用 decltype 的 min 模板不起作用:它返回一个引用(因为参数是一个左值),该引用最终在最常见的用途中引用了一个局部变量。
我认为每个人可能都不清楚问题是如何表现出来的。能否给个详细的解释和可能的修复方法?
【问题讨论】:
-
我在等你现在发布答案,拜托...... :)
-
我有点好奇如果 T 和 U 是不同的类型会发生什么?那还能用吗?
-
@ronag:如果它们能以某种方式转换为一个共同的“基础”。 :) float 和 int 都应该可以转换为 float,这将是表达式的类型。
-
所以最后,对于我们这些不太了解细节的人(例如@Potatoswatter 中的代码对我来说太复杂了),我们应该写什么?一个只有一个模板参数的
min函数(即没有计算返回类型的技巧)? -
对于 C++03,promote 模板可用于计算返回类型:)