【发布时间】:2012-02-20 20:59:15
【问题描述】:
我只能找到一种方法让函数接受可变数量的参数。
是这样的:
#include <iostream>
#include <stdarg.h>
using namespace std;
void Print(int argumentAmount, ... );
int main()
{
Print(5,11,22,33,44,55);
}
void Print(int argumentAmount, ... ){
va_list arguments;
va_start(arguments, argumentAmount);
int parameter;
for(int i = 0; i < argumentAmount; ++i ){
parameter = va_arg(arguments, int);
cout << parameter << endl;
}
va_end(arguments);
return;
}
2 个问题:
1.)我必须指定我要发送多少个参数 - 不可取
2.) 我不知道如何修改它,所以它会输出字符串。
如果不必多次重载函数,这样的事情是否可行:
void Output(/*not sure how this would look*/);
int main(){
Output("hello","world");
Output("this","is","a","test");
Output("As","many","strings","as","you","want","may","be","passed","in");
return 0;
}
void Output(/*not sure how this would look*/){
//loop through each string passed in and output it
}
这个呢:
void Capitalize(/*all passed by reference*/);
int main(){
string s1 = "hello";
string s2 = "world";
string s3 = "this";
string s4 = "is";
string s5 = "a";
string s6 = "test";
string s7 = "as";
string s8 = "many";
string s9 = "strings";
string s10 = "as";
string s11 = "you";
string s12 = "want";
Capitalize(s1,s2);
Capitalize(s3,s4,s5,s6);
Capitalize(s7,s8,s9,s10,s11,s12);
return 0;
}
void Capitalize(/*all passed by reference*/){
//capitalize each string passed in
}
我能想到的只有:
- 多次重载函数
- 让函数接受某种类型的容器
如果这是不可能,有人可以解释为什么编译器无法完成这样的任务。
【问题讨论】:
-
呃,您在顶部提供的解决方案是对底部提出的两个问题的答案。 “修改它使其输出字符串”是什么意思?
-
那么,你为什么不直接在数组或某种集合中传递字符串呢?
-
自从我查看 C 以来已经有一段时间了 - 但一个快速的谷歌发现了这个:[weblogs.asp.net/whaggard/archive/2004/07/03/172616.aspx] 很好地说明了语法。
-
编译器的唯一工作就是编译 C++ 代码。您是在问为什么 C++ 语言不支持该语法?
-
顺便说一句,“无限参数”有点陡峭;我今天才发现,C 编译器不需要支持超过 127 个参数!
标签: c++ function variables parameters arguments