我的问题是指带有类和关键字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()
时才有效。
我的意思是,我们已经在类参数中读取了temp的内存块class1& temp
,并且应该能够将该内存块与关键字this
进行比较。当我双重获取引用(this == &temp
)时,为什么该函数才为真?
由于
答案 0 :(得分:4)
this
是一个指针,而temp
是一个引用。当您在&temp
语句中写下if
时,您将获取temp
的地址。这会将其转换为指针,然后可以将其与this
进行比较。
答案 1 :(得分:2)
不要将引用声明与使用address-of运算符混淆。当&amp;标识符前面有一个类型,例如int或char,然后标识符被声明为对类型的引用。当&amp;标识符前面没有类型,用法是address-of运算符。
取自:http://msdn.microsoft.com/en-us/library/w7049scy(v=vs.71).aspx
答案 2 :(得分:1)
自c / c ++天以来已经有一段时间了,但让我对此进行一次尝试......
您没有两次使用参考运算符。当您指定class1&
时,您只需指定参数的类型(类型为&#34;类型为class1
&#34;的引用),实际上没有对{{1 }}。之后您实际使用temp
取消引用参数。它只是&符号的第二个外观,实际上是参考运算符。
答案 3 :(得分:0)
方法声明中的&
运算符只是意味着传递的对象不应该被复制,而是指向与传递给它的对象相同的位置(它是一个引用)。 &
中的if(this == &temp)
运算符需要实际获取该对象的地址(指针),以便您可以将其与this
指针进行比较。
答案 4 :(得分:0)
isitme
方法签名中的引用“operator”表示引用,即对象本身的别名。
另一方面,在行if(this == &temp)
中,操作符直接在对象上使用,从而返回对象的地址(指向它的指针)。
因此,如果要检查输入的引用是否等于this
,则需要与指针进行比较,这正是referance运算符返回的指针。
答案 5 :(得分:0)
&
表示该对象通过引用传递。也就是说,temp
是class1
对象的别名。 &temp
只是获取该对象的地址并将其与this
指向的对象进行比较。这两种语法在语义上是不同的,你不会两次使用地址。