在一个函数中传递多个相同类型的变量

时间:2017-10-05 02:47:00

标签: java c++

在某些语言中,我们能够声明多个相同类型的变量,如下所示:

int a,b,c,d;

是否可以以相同的方式将它们传递给函数/方法? E.G in C ++

template<class ItemType>
void add6(ItemType one,two,three,four,five,six){
  //some very interesting code
}

或者你必须在每一个前面键入ItemType吗?如果我标记的语言(C ++和Java)不能这样做,还有其他可以吗?

如果可以这样做,是否会出现这种情况?

还有这个名字吗?

谢谢!

++++++++++++++

编辑:我注意到我要求的内容尚不清楚,我将澄清它

做的时候

int a,b,c,d;

我一次声明所有这四个变量,主要是因为它在输入时比这样做更快:

int a;
int b;
int c;
int d;

我想要了解的是,如果相同的概念适用于函数签名。 E.G做

void func(int a,b,c,d){
  //some interesting code
}

而不是

void func(int a, int b, int c, int d){
  //some interesting code
}

再次感谢!

3 个答案:

答案 0 :(得分:1)

我认为你想向方法

发送多个参数

您可以使用varargs

在Java中执行此操作

实施例

public static void print( Object... values){
   for(Object c : values){
      System.out.println(c);
   }
}

print("string1","string2",1,2,3,4,5);

=================

在C ++中使用variadic templates

#include <string>
#include <iostream>

void Output() {
    std::cout<<std::endl;
}

template<typename First, typename ... Strings>
void Output(First arg, const Strings&... rest) {
    std::cout<<arg<<" ";
    Output(rest...);
}

int main() {
    Output("I","am","a","sentence");
    Output("Let's","try",1,"or",2,"digits");
    return 0;
}

答案 1 :(得分:1)

使用可变长度参数列表语法(请参阅@ HungVo的答案),您可以在Java和C ++中声明相同类型的未指定数量的尾随参数。 但是,对于参数列表前面的单独命名的参数,您必须将类型与每个参数名称一起编写。

但是,其他一些语言,例如Pascal和Ada, do 提供了一个参数列表语法,允许您声明多个相同类型的连续参数,而不必重复类型名称。例如,在Pascal中,您可以定义一个过程aProc,该过程接受类型INTEGERINTEGERINTEGERREAL的参数(按此顺序) ):用:

PROCEDURE aProc (a, b, c: INTEGER; x: REAL);
BEGIN
  ...
END;

Ada等价物几乎相同:

PROCEDURE aProc (a, b, c: INTEGER; x: FLOAT) IS
BEGIN
    ...
END aProc;

但是在Java(或C ++)中,你必须写:

void aProc(int a, int b, int c, float x)
{
    ...
}

答案 2 :(得分:0)

您可以使用Varargs

public void varargs(Object ... args)

然后你可以用:

来调用它
varargs(new Object(), new Object());

vararg不限制要放入参数的对象数。

Java会自动将所有传递的对象存储到数组中,因此您可以将vararg视为数组,例如。您可以迭代vararg(数组)中的每个元素。

您可以将数组放入vararg,但要确保数组的类型与vararg的类型相同。如果将数组放入Object vararg并且数组的类型不是对象,Java可能会将该数组视为单个元素而不是元素数组。请考虑以下代码:

public static boolean test(Object ... args) {
    for (Object object : args) {
        if (object.getClass().isArray()) {
            return true;
        }
    }
    return false;
}
public static void main(String[] args) {
    System.out.println(test(new int[] {1, 2})); 
//Prints true
}