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++引用”,会给你带来很多优秀的文档和解释的概念。