5

谁能告诉我有什么区别

void fun(MyClass &mc);

void fun(MyClass& mc);

在 C++ 中?

4

2 回答 2

8

没有给出。

最初,C 将允许:

int x, *y;

声明一个int,x和一个指向 int 的指针, y.

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

C++ 大量复制了这个。

然后添加引用,它们得到了类似的声明风格,除了 with&而不是*. 这意味着两者都MyClass &mcMyClass& mc允许。

在谈到选择时*,Strousup写道

两者都是“正确的”,因为两者都是有效的 C 和 C++ 并且都具有完全相同的含义。就语言定义和编译器而言,我们也可以说“int*p;”。或“int * p;”

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

“典型的 C 程序员”会写“int *p;” 并解释它“*p is what is the int”强调语法,并可能指向C(和C++)声明语法来论证风格的正确性。实际上,* 绑定到语法中的名称 p。

“典型的 C++ 程序员”会写“int* p;” 并解释它“p 是指向 int 的指针”,强调类型。实际上 p 的类型是 int*。我显然更喜欢这种强调,并认为它对于很好地使用 C++ 的更高级部分很重要。

(仅)当人们试图用一个声明声明多个指针时,才会出现严重的混淆:

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

将 * 靠近名称并不会显着降低此类错误的可能性。

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

每个声明声明一个名称可以最大限度地减少问题 - 特别是在我们初始化变量时。人们不太可能写:

int* p = &i; 诠释 p1 = p; // 错误:int 由 int* 初始化

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

每当某事可以通过两种方式完成时,就会有人感到困惑。每当有什么事情是口味问题时,讨论就会永远拖延下去。每次声明坚持一个指针并始终初始化变量,混淆的根源就消失了。有关 C 声明语法的详细讨论,请参阅 C++ 的设计和演变。

通过扩展,当涉及到 时,它&MyClass& mc“典型的 C++”风格相匹配。

于 2012-09-05T12:04:38.007 回答
5

对编译器来说没有区别。

第一个更接近通常的 C 语法,后者更接近 C++。

于 2012-09-05T11:56:31.967 回答