运营商地址(&)与参考运营商(&)

时间:2016-02-24 05:59:10

标签: c++

我对此案感到困惑:

声明一个指针:

int b =10;
int*a=&b;

这里&取b的地址。

考虑另一个例子:

/* Reference to the calling object can be returned */

Test& Test::func ()
{
   // Some processing
   return *this;
} 

这应该是一个指针,*这是一个指向的对象。 但是在这里我们要求将* this分配给& Test。

我们应该修改代码以让函数返回地址。我们还应该使用Test& ?

3 个答案:

答案 0 :(得分:7)

在C ++中,有两种不同的语法单元:

&variable; // extracts address of variable

Type& ref = variable; // creates reference called ref to variable

简易使用示例:

int v = 5;

cout << v << endl; // prints 5
cout << &v << endl; // prints address of v

int* p;
p = &v; // stores address of v into p (p is a pointer to int)

int& r = v;

cout << r << endl; // prints 5

r = 6;

cout << r << endl; // prints 6
cout << v << endl; // prints 6 too because r is a reference to v

至于在函数中使用引用,你应该谷歌&#34;在C ++中通过引用传递#34;,有很多关于它的教程。

答案 1 :(得分:3)

首先,this是一个指针。 *取消引用指针,意味着return *this;返回对象,而不是指向它的指针。

其次,Test&返回对Test实例的引用。在您的情况下,它是对象的引用。要使它返回指针,它应该是Test*

如果从右到左读取指针声明,则更有意义。

Test* func(); //When I call func, and dereference the returned value, it will be a Test

答案 2 :(得分:3)

  

但我们要求*this分配给&Test

不...您要求使用值/ *this来返回Test&,这是引用到{{ 1}}对象。这样做是返回对调用Test的对象的引用。

  

我们应该修改代码以让函数返回地址。我们还应该使用func()吗?

您应该使用Test&而不是......指针地址,并且已经更改了返回类型,您可以返回Test*(这是一个指针),但不是{ {1}}因为this不是指针。