提升::针对 C++11 的任何类型优化
boost::any typeid optimization for C++11
可能的重复项:
typeid 何时可以为同一类型返回不同的type_info实例?
如果我将下面的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;
}
不,不能保证。此断言可能会触发:
assert(&typeid(int) == &typeid(int));
虽然需要一个非常愚蠢的编译器来制造这种火灾,但它可能会发生。实际上,只有当跨动态库边界比较 typeid 时,它才会失败:
assert(&typeid_of_int_in_lib1() == &typeid_of_int_in_lib2());
这几乎肯定会触发。
相关文章:
- 将空基类优化对象强制转换为另一种类型是否会破坏严格的别名?
- 关于使用类型转换优化除法代码的问题
- 应用于整型类型的编译时优化 'std::isfinite()'
- 如果类包含基类类型的成员作为第一个元素,后跟其他成员,编译器是否可以优化空基?
- 在小对象优化中调试崩溃以进行类型擦除
- 定义新的优化类型
- 类型擦除是否有效取决于优化级别
- 元组作为一种返回类型,是经过优化的未处理值
- 使用非类型模板参数C++优化
- 在循环中使用无变量多态类型进行优化
- 各种类型的编译器优化
- Visual Studio 编译器优化,用于 C++ 中的类型转换
- 类型特征优化
- 提升::针对 C++11 的任何类型优化
- 实现任意类型擦除的小缓冲区优化的简单方法(如std::function.)
- 这种类型的优化是否有一个名称?
- 返回true的模板化类型方法是在条件中进行优化的良好候选者
- 我如何禁用c++返回值优化的一种类型
- VS是否优化了对相同类型的强制转换?
- 如何在c++中优化一个简单的数字类型包装器类