在我正在处理的一个项目中,我看到了这段代码。
struct Base {
virtual ~Base() { }
};
struct ClassX {
bool isHoldingDerivedObj() const {
return typeid(1 ? *m_basePtr : *m_basePtr) == typeid(Derived);
}
Base *m_basePtr;
};
我从未见过像那样使用typeid
。为什么要与?:
一起做这种奇怪的舞蹈,而不是直接执行typeid(*m_basePtr)
?可能有什么原因吗?Base
是一个多态类(带有虚析构函数)。
编辑:在代码的另一个地方,我看到了这个,并且它似乎是“多余”的等价物。
template<typename T> T &nonnull(T &t) { return t; }
struct ClassY {
bool isHoldingDerivedObj() const {
return typeid(nonnull(*m_basePtr)) == typeid(Derived);
}
Base *m_basePtr;
};
1 ? ...
) - user166390typeid(*m_basePtr ? *m_basePtr : *m_basePtr)
。 - Nemo