我对此案感到困惑:
声明一个指针:
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& ?
答案 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
不是指针。