В одном из проектов, над которыми я работаю, я вижу этот код
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;
};