首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C重载还是不重载?

用C重载还是不重载?
EN

Stack Overflow用户
提问于 2011-03-17 13:16:48
回答 3查看 154关注 0票数 0

像C中的printf() , scanf(), etc这样的可变长度参数列表函数与C++中的函数重载有什么不同?

以及如何调用

printf("Didnt Work %s",s);

不同于

printf(s,"Didnt Work %s");

其中s定义为:

代码语言:javascript
复制
const char *s="string";

请解释一下。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-17 13:19:52

在……里面

代码语言:javascript
复制
const char *s="string";
printf(s,"Didnt Work %s");

第一个参数" string“被解释为格式字符串。它没有插入代码,所以第二个参数永远不会被使用。结果将是"string“。

OTOH

代码语言:javascript
复制
printf("Didnt Work %s",s);

有一个插入代码,所以第二个参数被作为字符串插入,结果是“Work‘t Work string”。

这不是重载,因为虽然可以使用不同的参数类型,就像在重载中一样,但使用可变参数时,总是调用相同的函数。使用重载时,根据参数类型调用不同的函数。

票数 6
EN

Stack Overflow用户

发布于 2011-03-17 13:26:27

重载允许编译器检查参数的特定顺序。在C++中,如果类型与至少一个函数定义不匹配,编译器就会报错。另一方面,具有可变长度参数的C没有在编译时进行这种类型检查。编译器不会检查任何参数以确保它们对齐。即使不是所有编译器,也可以在大多数编译器上编译printf("1",3);。Printf将尝试将第一个参数作为字符串读取,并将继续读取,直到它到达表示字符串结束的空字节。这就是不鼓励使用可变长度参数列表的原因。

票数 0
EN

Stack Overflow用户

发布于 2011-03-17 15:26:58

回答你的第二个问题,其他人已经回答了第一个问题。

C中的变量参数列表与C++中的重载有很大的不同。在C语言中,你有一个函数printf,它可能用不同类型的参数做不同的事情。在C++中,对于重载,您可以根据参数的类型在不同的函数之间进行选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5335156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档