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

写过如下一个表达式:DWORDdwMilliseconds=min(max(0,(int)(1000*(fT1-0.05f+fT2))),20);结果某些情况下,dwMi... 写过如下一个表达式:
DWORD dwMilliseconds = min(max(0, (int)(1000*(fT1 - 0.05f + fT2))), 20);
结果某些情况下,dwMilliseconds会等于0xFFFFFFFF,谁能告诉我这是为什么?我有max限制,使得返回值不会为负数,又有min限制,使得返回值不大于20,怎么会有0xFFFFFFFF的出现呢?
展开
 我来答
果建翼
推荐于2017-11-23 · TA获得超过7923个赞
知道大有可为答主
回答量:1684
采纳率:0%
帮助的人:2428万
展开全部
首先确定你的min和max是标准库<algorithm>里面的,因为Win32头文件windef.h中,也定义了min和max,而windef中的是宏,不是函数。如果是宏的话,你这么复杂的表达式嵌套就可能出现问题。
如果是在Windows工程中,你可以把min和max换成_MIN和_MAX试试,这俩一般情况下代表C++库中的min和max。
下来你可以在每个参数前面都加上适当的cast试试,防止模版推导错误。不过我觉得这里不会推导错误才是。。
伦歆栾晓丝
2019-08-24 · TA获得超过3797个赞
知道大有可为答主
回答量:3028
采纳率:28%
帮助的人:169万
展开全部
包含在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);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rail_fish
2010-01-29 · TA获得超过369个赞
知道小有建树答主
回答量:132
采纳率:0%
帮助的人:0
展开全部
不太清楚你这个min和max是哪个库的,<stdlib.h>?
标准库没有带这种函数,应该是vc带的吧

这种函数不是用来限制的,而是比较
max的意思是比较2个参数谁大,min是比较谁小,返回值就是比较后选中的值
所以这不是你要的效果,手动写判断代码来限制最大最小值吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式