为什么我们两次使用参考运算符?

时间:2013-03-16 22:41:01

标签: c++ class pointers reference

我的问题是指带有类和关键字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)时,为什么该函数才为真?

由于

6 个答案:

答案 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)

类参数列表中的

&表示该对象通过引用传递。也就是说,tempclass1对象的别名。 &temp只是获取该对象的地址并将其与this指向的对象进行比较。这两种语法在语义上是不同的,你不会两次使用地址。