C++ 什么是&;在C++;函数参数列表是什么意思?

C++ 什么是&;在C++;函数参数列表是什么意思?,c++,C++,可能重复: 据我了解, void bar(int &x) { ... } 似乎是指通过引用传递x。但是在C++中,指针已经等了。那么有什么区别呢 void bar(int *x) { ... } // then call by bar(&x); 除了它更长这个事实。。。我还注意到,如果我使用第二种方法,我需要使用->,而不是在传入结构时使用。。。为什么?> P> StruouUp为C++引入引用的原因是运算符重载。 在示例函数bar中,用户是否必须将其称为bar(&x)

可能重复:

据我了解,

void bar(int &x) { ... }
似乎是指通过引用传递
x
。但是在C++中,指针已经等了。那么有什么区别呢

void bar(int *x) { ... }
// then call by
bar(&x);

除了它更长这个事实。。。我还注意到,如果我使用第二种方法,我需要使用
->
,而不是在传入
结构时使用
。。。为什么?

> P> StruouUp为C++引入引用的原因是运算符重载。

在示例函数
bar
中,用户是否必须将其称为
bar(&x)
(因为它需要一个指针),或者可以使用
bar(x)
(因为它需要一个引用)来调用它,都没有什么大不了的。至少,C程序员认为不是这样

<>但是,当操作符重载被添加到C++时,Stroustrup认为使用指针加载的重载操作符是非常不雅的(他的单词中的“丑陋”)。 与指针相比,引用在功能上有一些优势,例如临时对象可以绑定到常量引用,但不能对其应用
&
运算符。因此,与const等价的pass-by指针相比,pass-by-const引用函数有时会为调用者保存一行代码(以创建变量)

出于这个原因,一种可能的约定是,当函数计划在某个位置存储地址以供返回后使用时,接受一个指针;当函数不打算存储地址时,接受一个引用。它并没有阻止所有可能的创建悬空指针/引用的方法,但它捕获了一个大的指针/引用。不过,在编写函数式代码时,它确实会产生不幸的后果,因此并非每个人都适用

我还注意到如果我使用第二种方法,我需要使用->而不是 . 如果我传入一个结构。。。为什么?

这只是从C继承的语法。
访问结构的成员,
->
通过指向结构的指针访问成员。在C语言中,只能将指针放在左手上使用
->
,而不能将指针放在左手上使用
。因此,不需要严格地使用不同的符号,它只是有助于提高代码的可读性,使其具有提醒功能。例如,如果两者使用相同的符号
,则
(*ptr).member
ptr.member
的含义相同,这可能会造成混淆


在C++中,差异对语言有帮助。您可以为类类型重载
运算符->
,例如智能指针。但是类类型可以使用
访问成员。所以
some_smart\u ptr->get()
表示“在智能指针的引用上调用
get()
函数”,而
some\u smart\ptr.get()
表示“在智能指针上调用
get()
函数”。

引用基本上是一个地址恒定的指针,因此它与按地址调用具有相同的效果。这主要是语法上的不同:通过引用调用更方便,因为从调用站点上看,就好像是通过值调用一样(除非你必须小心临时调用)。

重复次数很多。这是一个参考,是的。我想你可能需要读一些关于C++的文章,Google只是关于“C++引用”,会给你带来很多优秀的文档和解释的概念。