我对编程很新,不能真正理解为什么我不能只声明参数 用与普通变量相同的方式输入,并且必须反复声明类型。
我的意思是,为什么我必须:
Func(int a, int b, float c)
而不是
Func(int a, b, float c)
当然,只要它们属于同一类型。
如果 可能,请告诉我如何。
提前致谢。
@ 0x499602D2:如果参数声明与对象声明更接近,那么void f(int a,float c,d)可能等于void f(int a,float c,浮动d)。该语言可以使这项工作正确和一致。它只是没有。 - 基思汤普森
这最能回答我的问题。但这是一个评论...
答案 0 :(得分:4)
这就是原因:
一切都有一些规则或合同的作品。 从理论上讲,您可以编写一个C编译器而不是:
func(int a, int b)
拿这个:
func(int a, b)
这将非常好。
但
C的创造者决定每一个正式的论证必须附加它的类型因此我们今天拥有它。这只是一个你必须遵循的惯例。
你必须遵循它,因为C / C ++解析器期望你这样做,否则它将无法理解你。
同样问题:
有没有办法用一种类型声明多个函数参数?
理论上可以这样写:
有多种方法是用一种类型声明函数参数吗?
如果您同意某人以这种方式构建问题,则必须遵守此合同 - 期间。
答案 1 :(得分:2)
这就是语法的方式。我不知道有一个“原因”,但在没有显式类型的(旧)C参数中,默认为int(并且在结束括号后甚至有一种语法提供类型),所以我不确定这可以安全放松。
答案 2 :(得分:1)
不,我不这么认为。
但是,在函数声明中,您可以省略变量名称。
Func(int a, int b);
可以
Func(int, int);
编译器只需要有关签名的足够信息,以便能够确定在运行时调用哪个函数。
答案 3 :(得分:1)
如果你希望b在c++11
中与a具有相同的类型(以防你以后更改b的类型应该反映出来),你可以这样做:
void Func( int a, decltype(a) b );
如果您想省略类型,则不能这样做。简单的答案是:语法不支持。为什么?可能会有很多答案,其中之一是:
void func( int, int ); // function declaration
我们现在会把它放在那里?
void func( int, ); // function declaration? ugly and unreadable
也容易出错:
void func( int a, foobar ); // suppose this works
// now we add #include where foobar is defined as a struct
// function suddenly changes it's signature
我很确定会出现更多不良副作用,所以请相信,你不希望这样。
答案 4 :(得分:0)
我意识到这并没有完全回答可能被问到的问题,但字面上回答了问题:是的,它 可以声明一个函数,比如f
,它接受类型为N
的{{1}}个参数(并返回T
)而不重复RC
,尽管使用了一个有趣的符号:< / p>
T
可以为成员函数做类似的事情。但请注意,我认为定义这样的函数也不可能!此外,您显然需要same_type_function<void, 2, int> f;
的定义。以下是如何实施此模板的快速示例:
same_type_function