如果我将operand->type() == typeid(ValueType)
下面的行更改为&operand->type() == &typeid(ValueType)
,代码仍然可以使用 gcc 并且在可执行文件中占用更少的空间(并且已经这样做了很多年),但是 C++11 标准是否提供任何保证,这种优化应该适用于不同的编译器?
template<typename ValueType>
ValueType * any_cast(any * operand)
{
return operand &&
#ifdef BOOST_AUX_ANY_TYPE_ID_NAME
std::strcmp(operand->type().name(), typeid(ValueType).name()) == 0
#else
operand->type() == typeid(ValueType)
#endif
? &static_cast<any::holder<ValueType> *>(operand->content)->held
: 0;
}