在哪里放置'&'在函数的参数?

时间:2012-09-05 11:54:27

标签: c++ function parameter-passing

有人可以告诉我

之间有什么区别
void fun(MyClass &mc);

void fun(MyClass& mc);

在C ++中?

2 个答案:

答案 0 :(得分:8)

没有给出。

最初,C允许:

int x, *y;

要声明intx和指向int y的指针。

因此,该类型定义的一部分 - 使其成为指针的位 - 可以与另一部分分开。

C ++复制了这个批发。

然后引用添加的地方,除了&而不是*之外,它们都有类似的声明风格。这意味着允许MyClass &mcMyClass& mc

关于*,Strousup wrote的选择:

  

两者在某种意义上都是“正确的”   两者都是有效的C和C ++,两者都有   完全相同的意思。据,直到...为止   语言定义和   我们可以只关注编译器   以及说“int * p;”或“int * p;”

     

“int * p;”之间的选择和“int   * p;“不是关于是非,而是关于风格和重点。”C强调   表达式;声明经常发生   被认为只是一个   必要之恶。 C ++,另一方面   手,重点强调类型。

     

“典型的C程序员”写道“int   * p;“并解释它”* p是什么是int“强调语法,并且可能   指向C(和C ++)声明   语法争论的正确性   风格。的确,*与之结合   语法中的名称p。

     

“典型的C ++程序员”写道   “int * p;”并解释它“p是一个   指向int“强调类型的指针。   实际上,p的类型是int *。一世   显然更喜欢强调和看到   它对于使用更多是重要的   C ++的高级部分。

     

严重混乱(仅)   当人们试图宣布几个   带有单个声明的指针:

     

int * p,p1; //可能的错误:p1是   不是int *

     

将*放在更接近名称的位置   不要犯这种错误   明显不太可能。

     

int * p,p1; //可能的错误?

     

每个声明声明一个名称   最小化问题 - 特别是   当我们初始化变量时。   人们不太可能写作:

     

int * p =& i; int p1 = p; //错误:   int由int *

初始化      

如果他们这样做,编译器会   抱怨。

     

每当两件事情可以完成时   方式,有人会感到困惑。   无论什么时候出现问题   品味,讨论可以拖延   永远。每个坚持一个指针   声明并始终初始化   变量和混乱的来源   消失。见设计和   C ++的演变时间更长   讨论C声明   语法。

通过扩展,在&时,MyClass& mc符合“典型的C ++”风格。

答案 1 :(得分:5)

编译器没有区别。

第一种更接近通常的C语法,后者更多是C ++ - ish。