比较基本类型指针和派生类型指针的指针。

4

假设有一个基类B和派生类D1、D2、D3。

B* b;
D1 d1;
D2 d2;
D2 *pd2 = &d2;
D3 d3;
//more code placing valid data on variables

在代码中可能会出现b = &d1b = pd2的情况。 现在,是否可以在不使用动态转换的情况下将b与指向d1、d2和d3的指针进行指针相等性比较?也就是说,我能这样做吗:

if (b == &d1)
{
//do something
}

?


b = pd2 不可能,你可能是想说 b = &pd2 - Grijesh Chauhan
@GrijeshChauhan pd2是一个指针,在你错过它的情况下。 - Akilan
@Akilan,你应该把它命名为pb而不是b - Adam
@Adam 是的,之前没有意识到。现在无法更改,因为这会混淆答案和评论。 - Akilan
2个回答

2

现在,是否有可能在不进行动态转换的情况下将b与指向d1、d2和d3的指针进行指针相等性比较?

是的。

if (b == pd2) 完全可以用来检查 bpd2 是否指向同一个对象。


1

if (b == &d1) 只会比较指针地址,除非已经创建了一个运算符重载来基于对象中存储的信息进行比较。

顺便提一下,根据你的代码,你不能执行 b = pd2,除非在一个或两个对象中正确地重载了运算符,或者使用 b = &pd2 替代。


是的,它不是深度比较。 - Grijesh Chauhan
我不想比较两个对象中存储的信息。我想比较两个指针是否指向同一个对象。其中一个指针是基类类型。 - Akilan
1
您不能在内置类型上定义重载运算符,因此第一句的后半部分不适用。if (b == &d1)只是简单地比较两个指针的值。始终如此。 - Pete Becker
@bizzehdee 不要在意这不是 OP 想要的,但“除非已创建运算符重载”是不可能的。你不能重载指针运算符。两个操作数中必须有一个是类或枚举。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接