1

我的问题是指带有类的指针和关键字 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& temptemp 的内存块,并且应该能够将该内存块与关键字 进行比较this。为什么只有当我双重获取参考 ( this == &temp) 时该函数才为真?

谢谢

4

6 回答 6

5

this是指针,而是temp引用。当你&temp在你的if陈述中写下,你正在使用的地址temp。这会将其转换为一个指针,然后可以与this.

于 2013-03-16T22:44:03.170 回答
2

不要将引用声明与地址操作符的使用混淆。当 & identifier 前面有一个类型(例如 int 或 char)时,则 identifier 被声明为对该类型的引用。当 & 标识符前面没有类型时,用法是地址运算符的用法。

取自:http: //msdn.microsoft.com/en-us/library/w7049scy (v=vs.71).aspx

于 2013-03-16T23:34:08.707 回答
1

自 c/c++ 时代以来已经有一段时间了,但让我试一试......

您没有使用两次引用运算符。当您指定时,class1&您只是指定参数的类型(类型是“类型的引用class1”),实际上并没有对temp. 稍后,您实际上使用 取消引用参数&temp。实际上是引用运算符只是 & 符号的第二次出现。

于 2013-03-16T22:44:11.653 回答
0

方法声明中的&操作符仅仅意味着传递的对象不应该被复制,而是指向与传递给它的对象相同的位置(它是一个引用)。&需要运算符 in来实际获取该if(this == &temp)对象(指针)的地址,以便您可以将其与this指针进行比较。

于 2013-03-16T22:45:07.410 回答
0

方法签名中的引用“操作符”isitme表示引用,即对象本身的别名。

另一方面,在 行if(this == &temp)中,运算符直接在对象上使用,因此返回对象的地址(指向它的指针)。

因此,如果要检查输入的引用是否等于this,则需要与指针进行比较,这正是引用运算符返回的内容。

于 2013-03-16T22:45:56.127 回答
0

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

于 2013-03-16T22:48:12.570 回答