繁体   English   中英

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

[英]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 ,则需要与指针进行比较,这正是引用运算符返回的内容。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM