假设有一个基类B和派生类D1、D2、D3。
B* b;
D1 d1;
D2 d2;
D2 *pd2 = &d2;
D3 d3;
//more code placing valid data on variables
在代码中可能会出现b = &d1
或b = pd2
的情况。
现在,是否可以在不使用动态转换的情况下将b与指向d1、d2和d3的指针进行指针相等性比较?也就是说,我能这样做吗:
if (b == &d1)
{
//do something
}
?
假设有一个基类B和派生类D1、D2、D3。
B* b;
D1 d1;
D2 d2;
D2 *pd2 = &d2;
D3 d3;
//more code placing valid data on variables
在代码中可能会出现b = &d1
或b = pd2
的情况。
现在,是否可以在不使用动态转换的情况下将b与指向d1、d2和d3的指针进行指针相等性比较?也就是说,我能这样做吗:
if (b == &d1)
{
//do something
}
?
现在,是否有可能在不进行动态转换的情况下将b与指向d1、d2和d3的指针进行指针相等性比较?
是的。
if (b == pd2)
完全可以用来检查 b
和 pd2
是否指向同一个对象。
if (b == &d1)
只会比较指针地址,除非已经创建了一个运算符重载来基于对象中存储的信息进行比较。
顺便提一下,根据你的代码,你不能执行 b = pd2
,除非在一个或两个对象中正确地重载了运算符,或者使用 b = &pd2
替代。
if (b == &d1)
只是简单地比较两个指针的值。始终如此。 - Pete Becker
b = pd2
不可能,你可能是想说b = &pd2
。 - Grijesh Chauhanpb
而不是b
。 - Adam