zeu*_*unk 0 c++ pointers pass-by-reference
我总是通过引用传递函数原型中的dereferencing,然后在传入参数时引用变量.我最近看到的似乎也是一种通过引用传递的方式,但它的工作方式略有不同.它引用原型中的参数,但在将值输入函数时不期望任何类型的(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
}
Run Code Online (Sandbox Code Playgroud)
这string &dontKnow是通过引用传递的"官方"方式,第一种方式string *byRef是通过获取要传递的对象的地址来传递指针.
这有点令人困惑,因为该&角色在两个不同的环境中使用.请参阅以下行:
something(&test1, test2);
Run Code Online (Sandbox Code Playgroud)
在该行中,&符号用于告诉编译器" 将此变量的地址传递给函数something",没有符号的第二个参数是通过引用正确传递.
由于以下几个原因,第一种方法没有通过引用正确传递: