我总是通过引用在函数原型中通过引用传递,然后在传入参数时引用变量。我最近看到的似乎也是一种通过引用传递的方式,但它的工作方式略有不同。它引用原型中的参数,但在将值输入函数时不期望任何类型的(de)引用。使用我的方法时,您必须使用“ - >”运算符访问成员函数,但使用其他方法时可以使用“。”运营商。您能否解释一下这两种方法之间的区别,以及实际中是否有更常用的方法。我在下面有一些示例代码来更好地解释我的意思:
#include <iostream>
#include <string>
using namespace std;
void something(string *byRef, string &dontKnow);
int main(int argc, const char * argv[])
{
string test1 = "test string 1";
string test2 = "second test";
something(&test1, test2);
return 0;
}
void something(string *byRef, string &dontKnow) {
cout << "test1 address = " << byRef << "\nsize = " << byRef->size() << endl;//size function accessed by "->"
cout << "test2 address = " << &dontKnow << "\nsize = " << dontKnow.size() << endl;//now accessed by "." and reference operator required for address
}
答案 0 :(得分:5)
string &dontKnow
是&#34;官方&#34;通过引用传递的方式,第一种方式string *byRef
通过获取要传递的对象的地址来传递指针。
它有点令人困惑,因为&
字符用于两个不同的上下文中。请参阅以下行:
something(&test1, test2);
在该行中,&符号用于告诉编译器&#34;将此变量的地址传递给函数something
&#34;,第二个参数没有&符号是一个适当的参考传递。
由于以下几个原因,第一种方法没有通过引用正确传递:
答案 1 :(得分:2)
传递*
不是通过引用传递,而是通过指针传递。从更深层次的意义上讲,它在技术上是相同的,但是通过它的指针使用对象时必须使用的synthax是不同的。 Afaik在C ++中使用指针的唯一原因是,如果您希望变量具有NULL
的能力,或者您希望代码可以移植到C。