fmin
和fmax
专门用于浮点数(因此称为"f").如果将其用于ints,则可能会因转换、函数调用开销等原因而导致性能或精度损失,具体取决于编译器/平台.
std::min
和std::max
是模板函数(在标题<algorithm>
中定义),可以在任何类型上使用小于(<
)的运算符,因此它们可以在允许这种比较的任何数据类型上操作.如果你不想让比较功能失效,你也可以提供自己的比较功能.
这更安全,因为当参数具有不同类型时,您必须显式转换参数以使其匹配.例如,编译器不会让您意外地将64位整型转换为64位浮点型.仅此原因就应该使模板成为您的默认 Select .(归功于Matthieu M&;bk1e)
即使当与浮子一起使用时,模板may在性能上也胜人一筹.编译器始终可以 Select 内联对模板函数的调用,因为源代码是编译单元的一部分.另一方面,有时内联对库函数的调用需要impossible次(共享库、缺少链接时间优化等).