Performance of std::any

In contrast to std::optional and std::variant (std::variant is discussed in Chapter 8, Meta programming and Compile-Time evaluation), std::any heap-allocates its withheld value (although implementers are encouraged to store small objects inside of the any). Also, invoking a std::any_cast to retrieve the value is quite slow compared to std::variant.

The Boost equivalent of std::any, boost::any, provides a fast version of std::any_cast called boost::any_cast_unsafe which can be utilized if you know which type is contained. In contrast to std::any_cast, using a boost::any_cast_unsafe with the wrong type will result in undefined behavior instead of a thrown exception.

Get C++ High Performance now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.