flu*_*ter 5 c++ performance variant time-complexity c++17
在std::holds_alternative文档中std::get_if,它没有说明操作的复杂性要求是什么。这两个函数是否总是O(1),或者就 中的类型数量而言是线性的std::variant?另一种提问方式是,对于具有许多成员类型和很少成员类型的变体,这两种操作的性能是否存在差异。
a 最合理的实现variant是一个索引整数,表示类型(也可以通过该index()方法访问)和所保存值的对齐存储。
holds_alternative由于and的类型参数get_if是模板,因此可以在编译时完成索引计算的类型。因此,运行时检查是在 const 时间内执行的。只是一个简单的整数比较。
一些变体方法描述了时间复杂度。例如visit:
\n\n对于 n \xe2\x89\xa4 1 [n = 访问的变体数量],可调用对象的调用是在常数时间内实现的,即,对于 n = 1,它不依赖于 的替代类型的数量
\nVariants0。对于 n > 1,可调用对象的调用\n没有复杂性要求
这支持了我的评估
\n