从C++中,std::minstd::max优选超过fminfmax?对于比较两个整数,它们提供的功能基本相同吗?

你倾向于使用这些函数中的一组,还是更喜欢自己编写(也许是为了提高效率、可移植性、灵活性等)?

100

  1. C++标准模板库(STL)在标准C++ algorithm报头中声明minmax函数.

  2. C标准(C99)在标准Cmath.h标头中提供fminfmax功能.

提前谢谢!

推荐答案

fminfmax专门用于浮点数(因此称为"f").如果将其用于ints,则可能会因转换、函数调用开销等原因而导致性能或精度损失,具体取决于编译器/平台.

std::minstd::max是模板函数(在标题<algorithm>中定义),可以在任何类型上使用小于(<)的运算符,因此它们可以在允许这种比较的任何数据类型上操作.如果你不想让比较功能失效,你也可以提供自己的比较功能.

这更安全,因为当参数具有不同类型时,您必须显式转换参数以使其匹配.例如,编译器不会让您意外地将64位整型转换为64位浮点型.仅此原因就应该使模板成为您的默认 Select .(归功于Matthieu M&;bk1e)

即使当与浮子一起使用时,模板may在性能上也胜人一筹.编译器始终可以 Select 内联对模板函数的调用,因为源代码是编译单元的一部分.另一方面,有时内联对库函数的调用需要impossible次(共享库、缺少链接时间优化等).

C++相关问答推荐

位屏蔽对于无符号转换是强制的吗?

为什么getchar()挂起了,尽管poll()返回了一个好的值?""

是否定义了数组指针类型转换为指针类型?""""

Ebpf内核代码:permission denied:invalid access to map value

堆栈帧和值指针

__VA_OPT__(,)是否可以检测后面没有任何内容的尾随逗号?

如何使fputs功能提示错误输入并要求用户重新输入.程序停止而不是请求新的输入

为什么删除CAP_DAC_OVERRIDE后创建文件失败?

Win32API Wizzard97 PropSheet_SetWizButton不工作

获取每个循环迭代结束时的当前时间

有什么方法可以将字符串与我们 Select 的子字符串分开吗?喜欢:SIN(LOG(10))

在另一个函数中使用realloc和指针指向指针

如何使用C++在控制台中以彩色打印被阻止的客户端

C堆栈(使用动态数组)realloc内存泄漏问题

搜索使用int代替time_t的用法

&stdbool.h&q;在嵌入式系统中的使用

RISC-V GCC编译器错误编译ASM代码

未使用sem_open正确初始化信号量

execve 不给出which命令的输出

C simd _m128 晶圆厂