C++中的min和max函数的问题。。。

写过如下一个表达式:
DWORD dwMilliseconds = min(max(0, (int)(1000*(fT1 - 0.05f + fT2))), 20);
结果某些情况下,dwMilliseconds会等于0xFFFFFFFF,谁能告诉我这是为什么?我有max限制,使得返回值不会为负数,又有min限制,使得返回值不大于20,怎么会有0xFFFFFFFF的出现呢?

首先确定你的min和max是标准库<algorithm>里面的,因为Win32头文件windef.h中,也定义了min和max,而windef中的是宏,不是函数。如果是宏的话,你这么复杂的表达式嵌套就可能出现问题。
如果是在Windows工程中,你可以把min和max换成_MIN和_MAX试试,这俩一般情况下代表C++库中的min和max。
下来你可以在每个参数前面都加上适当的cast试试,防止模版推导错误。不过我觉得这里不会推导错误才是。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-24
包含在c++标准库中头文件
中,在头文件
中定义了min,max的宏,若在包含
的同时包含
会导致函数无法使用。
提供了_cpp_min等函数来代替min函数的功能。
c++11标准:
中min函数的原型
default
(1)
template
const
t&
min
(const
t&
a,
const
t&
b);
custom
(2)
template
const
t&
min
(const
t&
a,
const
t&
b,
compare
comp);
initializer
list
(3)
template
t
min
(initializer_list
il);
template
t
min
(initializer_list
il,
compare
comp);
第2个回答  2010-01-29
不太清楚你这个min和max是哪个库的,<stdlib.h>?
标准库没有带这种函数,应该是vc带的吧

这种函数不是用来限制的,而是比较
max的意思是比较2个参数谁大,min是比较谁小,返回值就是比较后选中的值
所以这不是你要的效果,手动写判断代码来限制最大最小值吧
相似回答