c++中min函数的问题

qq_34201637 2017-09-13 03:44:31
各位大大好,我有个关于c++中min函数的问题不明白,望各位指点

就是我如果这样运行是可以的

min(sister.size(),brother.size()/2);


这样也是可以的

int k=sister.size();
int m=brother.size();
min(k,m/2);


但我如果这样写:

int m=brother.size();
min(sister.size(),m/2);

就不可以.

想问问大家是为什么?
...全文
1350 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2017-09-14
  • 打赏
  • 举报
回复
你提示的错误是什么,试下 min((int)sister.size(),m/2);
speedmancs 2017-09-14
  • 打赏
  • 举报
回复
size_t一般是unsigned int, 和int类型不一致,无法无法实例化模板函数min<T>
icyFake 2017-09-14
  • 打赏
  • 举报
回复

string sister  = "sister", brother = "brother";
//第一段代码
min(sister.size(), brother.size()/2);
//第二段代码
min((int)sister.size(), (int)brother.size());
//第三段代码
min(sister.size(), (int)brother.size()/2);
注意上面第一段代码的类型转换,这是实际的效果 而这是C++的文档里说的: http://en.cppreference.com/w/cpp/algorithm/min
引用

template<class T> 
const T& min(const T& a, const T& b)
{
    return (b < a) ? b : a;
}
前面说了,也就是第三个min,传进去的参数,前后类型不同 但是在std::algorithms里定义的min中,前后两个比较的参数,类型必须相同
幻夢之葉 2017-09-14
  • 打赏
  • 举报
回复
size_t m=brother.size(); min(sister.size(),m/2);
自信男孩 2017-09-13
  • 打赏
  • 举报
回复
应该是类型不一致导致的。sister.size()类型和m的类型不一样。
cain-won 2017-09-13
  • 打赏
  • 举报
回复
min函数的参数类型必须一致,你这两个参数的类型肯定不是一样的
x_xx_xxx_xxxx 2017-09-13
  • 打赏
  • 举报
回复
是不是 .size() 和 int 类型不一致,实参类型不匹配形参类型,产生了错误。{即 min() 函数模板 支持的参数类型 不存在 .size() 返回类型 和 int 类型 一起比较大小。} 我是这么推测的。
sdghchj 2017-09-13
  • 打赏
  • 举报
回复
size()返回的size_t类似,也就是unsigned int,和int类型类型不一致。 std::min是模板函数,要求两参数类型一致才能实例化。
ckc 2017-09-13
  • 打赏
  • 举报
回复
不行是出了什么错? brother.size()返回什么类型?

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧