有人可以告诉我
之间有什么区别void fun(MyClass &mc);
和
void fun(MyClass& mc);
在C ++中?
答案 0 :(得分:8)
没有给出。
最初,C允许:
int x, *y;
要声明int
,x
和指向int y
的指针。
因此,该类型定义的一部分 - 使其成为指针的位 - 可以与另一部分分开。
C ++复制了这个批发。
然后引用添加的地方,除了&
而不是*
之外,它们都有类似的声明风格。这意味着允许MyClass &mc
和MyClass& 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。