C++ 为什么可以';我们不能在函数参数列表中将相同的数据类型参数组合在一起吗?

C++ 为什么可以';我们不能在函数参数列表中将相同的数据类型参数组合在一起吗?,c++,function,parameters,C++,Function,Parameters,我想知道为什么我们不能在函数参数列表中将相同数据类型的变量组合在一起 i、 e 为什么这个原型不能: int func (int a, int b, int c, const char ch1, const char ch2); 这样写: int func (int a, b, c, const char ch1, ch2); 这将节省时间和空间,IMHO。molbdnilo在评论中说,编译器需要能够区分类型名和参数名之间的差异。Type[ArgName]{,Type ArgName}的语

我想知道为什么我们不能在函数参数列表中将相同数据类型的变量组合在一起

i、 e

为什么这个原型不能:

int func (int a, int b, int c, const char ch1, const char ch2);
这样写:

int func (int a, b, c, const char ch1, ch2);


这将节省时间和空间,IMHO。

molbdnilo在评论中说,编译器需要能够区分类型名和参数名之间的差异。
Type[ArgName]{,Type ArgName}
的语法允许编译器首先查找类型说明符和可选参数名称。如果您按照您的帖子描述的方式执行,编译器就没有简单的方法来确定
b
c
是否应该是类型名或参数名,因为您可以执行以下操作:

typedef int foo;
int func(int x, int foo) { ... }
(即使这是个坏主意),编译器也不可能说“啊,它是类型的名称,所以不能是变量名”——只有参数名的相对位置告诉编译器如何解释它

请注意,对于原型,执行以下操作是完全有效的:

  int func(int, int, double, int, char);

(如果此特定函数中未使用
double
char
参数,也可以使用此函数,但该函数是接口的一部分,这些参数始终存在,因此您需要告诉编译器它们在那里)


在设计语言时,确保编译器能够理解您的意思是非常重要的,因此,根据“编译器必须猜测”的内容,语法可能意味着两种不同的东西,这将给程序员带来有趣的挑战,让他们了解它的实际功能

因为这就是指定语言的方式?阅读参数列表时,区分参数也容易得多。而且编写编译器也更容易。开始用汇编语言编写它,并重写C++语言的编译器和链接器,然后就开始了!您可能不应该有大量相同类型的参数,因此没有理由使其更简单;c型;结构ch2{}编译第二个示例。你还认为这是个好主意吗?@molbdnilo是的,现在说得通了。这很奇怪,现在看来很明显。
  int func(int x, int y, double, int z, char);