函数重载的问题

mymtom 2013-04-28 03:43:31
原帖在Linux区
http://bbs.csdn.net/topics/390392472


// 如果有两个函数
my_setenv (const char *format, ...);
my_setenv (const char *variable_name,
const char *format, ...);
// 那么
my_setenv ("PROGRAM=%s", basename (argv[0]));
// 会调用哪一个呢?
...全文
181 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2013-04-28
  • 打赏
  • 举报
回复
楼上是标准党成员! 就是说 my_setenv ("PROGRAM=%s", basename (argv[0])); 使用标准转换,匹配了 my_setenv (const char *variable_name, const char *format, ...); 所以调用之!300分都给你了!
铁文 2013-04-28
  • 打赏
  • 举报
回复
C++标准13.3.3 发生隐式转换时的匹配顺序: 1. 标准转换 2. 用户自定义转换操作符(operator int()等) 3. 省略号 basename (argv[0]))的类型大概为char*或者const char* 吧。 将char*转换到const char*是一个标准转换,比将char*转换到...的优先级要高,因此 my_setenv (const char *variable_name, const char *format, ...); 更加匹配。 my_setenv (const char *format, ...); 会在以下的情况下调用: 1. 第二个参数是一个指针类型,并且不是char*,const char*; 2. 第二个参数为其它类型,并且,如果是对象的,也没有提供operator char*()或者operator const char*()
qq120848369 2013-04-28
  • 打赏
  • 举报
回复
这个问题很高深, 围观了.
Athenacle_ 2013-04-28
  • 打赏
  • 举报
回复
个人感觉应该调用了第二个。。 my_setenv ("PROGRAM=%s", basename (argv[0])); 假定basename(argv[0]))的类型是char*或者const char*,选择第二个函数属于精确匹配,约束性更强点。。。
youyou1912 2013-04-28
  • 打赏
  • 举报
回复
跟字符串内容无关, 静态判断, 第二个. my_setenv("abc"); 才会调用第一个. 这个和普通函数重载一样 void my_setenv(int a = 0, b=0); void my_setenv(int a); 接分.
chuachua66 2013-04-28
  • 打赏
  • 举报
回复
我觉得,会调第一个,但是如果没有%s的话,会报ambiguous吧。

64,651

社区成员

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

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