像C中的printf() , scanf(), etc这样的可变长度参数列表函数与C++中的函数重载有什么不同?
以及如何调用
printf("Didnt Work %s",s);
不同于
printf(s,"Didnt Work %s");
其中s定义为:
const char *s="string";请解释一下。
发布于 2011-03-17 13:19:52
在……里面
const char *s="string";
printf(s,"Didnt Work %s");第一个参数" string“被解释为格式字符串。它没有插入代码,所以第二个参数永远不会被使用。结果将是"string“。
OTOH
printf("Didnt Work %s",s);有一个插入代码,所以第二个参数被作为字符串插入,结果是“Work‘t Work string”。
这不是重载,因为虽然可以使用不同的参数类型,就像在重载中一样,但使用可变参数时,总是调用相同的函数。使用重载时,根据参数类型调用不同的函数。
发布于 2011-03-17 13:26:27
重载允许编译器检查参数的特定顺序。在C++中,如果类型与至少一个函数定义不匹配,编译器就会报错。另一方面,具有可变长度参数的C没有在编译时进行这种类型检查。编译器不会检查任何参数以确保它们对齐。即使不是所有编译器,也可以在大多数编译器上编译printf("1",3);。Printf将尝试将第一个参数作为字符串读取,并将继续读取,直到它到达表示字符串结束的空字节。这就是不鼓励使用可变长度参数列表的原因。
发布于 2011-03-17 15:26:58
回答你的第二个问题,其他人已经回答了第一个问题。
C中的变量参数列表与C++中的重载有很大的不同。在C语言中,你有一个函数printf,它可能用不同类型的参数做不同的事情。在C++中,对于重载,您可以根据参数的类型在不同的函数之间进行选择。
https://stackoverflow.com/questions/5335156
复制相似问题