使用stdarg.h我们可以使用可变数量的参数进行函数调用。这也被归类为函数重载?传递可变数量的参数特征 - 函数重载?
回答
通常情况下,函数重载意味着根据给定的参数调用函数/方法的不同实例。使用C中的可变参数,不管参数列表如何,都会调用相同的函数。基于此,答案将是“否”。函数本身当然可以模仿重载的行为(如果是1个参数,那么做A,如果是2个参数,则做B),但它通常不会被称为“重载”。
真的,答案可能是“是”或“否”,具体取决于您对“函数重载”的定义。
从编译器的角度来看,只有一个函数被实例化。从用户的持续性来看,你可能会调用这个“重载”,但它不是由语言或编译器来强制执行的。
如果您指的是实现,编译器不会创建重载。变量参数函数使用va_start/va_arg/va_end来获取它们的参数。
答案是直的,因为C没有按原样实现函数重载。它可能允许你改变一个或两个参数,但是内部发生的并不是函数重载的实际机制。
当一个重载的函数被调用时,C++编译器通过检查在该呼叫的 参数的数量,类型和顺序选择 正常功能。函数重载通常用于创建几个执行类似任务但具有不同数据类型的名称相同的函数。
我真的不明白你的问题,但在一般的函数重载取决于参数的差异。
该方法的参数。
公众诠释加载(INT A,INT B)
公共浮添加(浮起,浮子B)
这是函数重载。至少有一个参数必须改变才能重载该函数。这在c的早期版本中是不可能的,因为它们不会通过传递参数的类型来识别函数。
不,这不是函数重载的例子。
真正的重载意味着你有几个不同的函数具有相同的名称,但通过它们的参数列表进行区分。根据您传递的参数,将调用不同的函数实例。
Overloading表示有多个合同绑定到同一个名称。 例如:
int a(int i1, int i2);
int a(char c);
int a();
这不会在存在C作为符号必须是相同的范围内是唯一的,但该存在于C++。
因此,即使它可以被称为几种方法,使用不同的参数类型和数量,该
功能int a(int i, ...);
不能被看作是用C超载因为只有一个合同,这是“给我想要的参数和我会找到一种方法来处理它们“。
但是该功能可以在这样的情况下被视为在C++中重载:
int a(int i, ...);
int a();
号
重载意味着不同的功能将被调用取决于数量和/或类型(s)的参数(一些语言也可以使用返回类型)。但在这种情况下,无论参数的数量多少,您都可以调用相同的函数。
这比func(42)
与func(43)
没有更多的超载。
请注意,C99的确有一些的行为很像超载的狭义形式。如果您有#include <tgmath.h>
,则sqrt(x)
将调用三种不同功能(sqrtf()
,sqrt()
或sqrtl
())中的一种,具体取决于x
的类型。但这实际上是一个“类型通用宏”“,而不是一个重载函数。 C11添加了_Generic
关键字,使该设施可供用户编写的代码使用。但这与OP的问题无关。
- 1. 问题传递一个数组变量参数特征参数
- 2. 可以将可变数量的参数传递给函数吗?
- 3. 传递变量参数的函数
- 4. 传递可变数量的参数
- 5. .Net - 传递可变数量的参数
- 6. 传递变量类型,函数参数
- 7. 通过函数参数传递变量
- 8. 传递可变数量的参数的构造函数
- 9. 具有可变数量参数的递归函数 - 如何传递左参数?
- 10. Spark Java:将可变数量的参数传递给函数
- 11. C++将可变数量的参数传递给一个函数
- 12. 如何将可变数量的参数传递给sprintf()函数?
- 13. 如何可变数量的参数传递给函数在PHP
- 14. 变量参数和函数重载
- 15. 传递函数参数变量,通过从PHP jQuery的负载
- 16. 函数重载 - 传递恒定VS传递变量C++
- 17. 参数传递,但变量的参数
- 18. 传递给函数的参数数量?
- 19. 传递给模板函数的可变参数模板参数
- 20. 将一个函数(可变参数数量!)作为参数传递
- 21. 将函数作为参数传递给变量 - 可能吗?
- 22. 动态地将参数传递给可变参数函数
- 23. 如何将可变参数传递给接受可变参数的函数?
- 24. 传递重载函数指针作为参数重载模板函数
- 25. 如何将所有可变数量的参数传递给接受可变数量参数的另一个函数?接受参数的个数的变量#
- 26. 传递变量参数在C++可变参数模板
- 27. 将特征向量传递给sklearn的Logistic回归函数
- 28. 从函数到函数传递变量
- 29. 传递数组中的变量作为函数参数?
- 30. jquery函数传递变量
这个分类对你有什么好处? – cnicutar
我认为这纯粹是“超载”意味着什么的问题。我个人不会称这种重载,但它**可能**实现一个丑陋的版本在C中使用预处理器与可变宏和可怕的黑客来测试参数的类型... –