![](/img/trans.png)
[英]Why do we pass a reference to the object as an argument to the overloaded output operator
[英]Why do we use the reference operator twice?
我的问题涉及带有类的指针和关键字this。
class class1 {
public:
bool isitme(class1& temp){
if(this == &temp)
return true;
else return false;
}
};
int main () {
class1 c3;
class1* c2 = &c3;
if(c3.isitme(*c2))
cout << "c3 == c2"; //it is returning that
system("pause");
}
上面的代码正在工作,但是我不明白的是为什么只有在bool isitme(class1& temp)
和if(this == &temp)
在同一函数isitme()
起作用。
我的意思是,我们已经在类参数中读取了内存块class1& temp
的temp,并且应该能够将该内存块与关键字this
进行比较。 为什么当我两次获得引用( this == &temp
)时,函数才只有true?
谢谢
this
是一个指针,而temp
是一个引用。 在if
语句中写入&temp
时,您使用的是temp
的地址。 这会将其转换为可以与this
进行比较的指针。
不要将引用声明与address-of运算符混淆。 当&标识符前面有类型(例如int或char)时,标识符将声明为对该类型的引用。 如果&标识符前面没有类型,则使用的是地址运算符的用法。
摘自: http : //msdn.microsoft.com/zh-cn/library/w7049scy( v= vs.71).aspx
从c / c ++时代开始已经有一段时间了,但是让我at一口...
您没有两次使用引用运算符。 当您指定class1&
你只指定参数的类型(类型是“类型的引用class1
”),实际上没有做任何事情来temp
。 稍后,您实际上使用&temp
取消引用了该参数。 实际上,这只是参考符号的第二个出现。
方法声明中的&
运算符只是意味着不应复制传递的对象,而应指向与传递给它的对象相同的位置(它是引用)。 需要if(this == &temp)
的&
运算符来实际获取该对象(指针)的地址,以便可以将其与this
指针进行比较。
isitme
方法的签名中的引用“运算符”表示引用,即对象本身的别名。
另一方面,在if(this == &temp)
,运算符直接在对象上使用,因此返回对象的地址(指向它的指针)。
因此,如果要检查输入的引用是否等于this
,则需要与指针进行比较,这正是引用运算符返回的内容。
在类参数列表中的&
表示对象是通过引用传递的。 也就是说, temp
是class1
对象的别名。 &temp
只是获取该对象的地址并将其与this
指向的对象进行比较。 两种语法在语义上是不同的,您不会两次获取地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.