gpt4 book ai didi

c++ - 在 C++ 中通过引用传递对象

转载 作者:IT老高 更新时间:2023-10-28 12:58:49 26 4
gpt4 key购买 nike

在 C++(也是 C)中通过引用传递变量的常用方法如下:

void _someFunction(dataType *name){ // dataType e.g int,char,float etc.
/****
definition
*/
}

int main(){
dataType v;
_somefunction(&v); //address of variable v being passed
return 0;
}

但令我惊讶的是,我注意到当通过引用传递对象时,对象本身的名称服务于目的(不需要 & 符号)并且在声明/定义期间函数的参数前不需要 * 符号。下面的例子应该清楚:

// this
#include <iostream>
using namespace std;

class CDummy {
public:
int isitme (CDummy& param); //why not (CDummy* param);
};

int CDummy::isitme (CDummy& param)
{
if (&param == this) return true;
else return false;
}

int main () {
CDummy a;
CDummy* b = &a;
if ( b->isitme(a) ) //why not isitme(&a)
cout << "yes, &a is b";
return 0;
}

我很难理解为什么要对 class 进行这种特殊处理。即使是几乎像一个类的结构也不会以这种方式使用。 对象名称是否像数组一样被视为地址?

最佳答案

您似乎感到困惑的是,声明为按引用传递(使用 &)的函数不是使用实际地址调用的事实,即 &a

简单的答案是将函数声明为传递引用:

void foo(int& x);

是我们所需要的。然后自动通过引用传递。

你现在这样调用这个函数:

int y = 5;
foo(y);

y 将通过引用传递。

你也可以这样做(但你为什么要这样做?口头禅是:尽可能使用引用,需要时使用指针):

#include <iostream>
using namespace std;

class CDummy {
public:
int isitme (CDummy* param);
};


int CDummy::isitme (CDummy* param)
{
if (param == this) return true;
else return false;
}

int main () {
CDummy a;
CDummy* b = &a; // assigning address of a to b
if ( b->isitme(&a) ) // Called with &a (address of a) instead of a
cout << "yes, &a is b";
return 0;
}

输出:

yes, &a is b

关于c++ - 在 C++ 中通过引用传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18147038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com