Example 2 – Creating a generic safe cast function

When casting between data types in C++ there is a multitude of different ways things can go wrong:

  • You might lose a value if casting to a integer type of lower bit length
  • You lose a value if casting a negative value to an unsigned integer
  • If casting from a pointer to any other integer than uintptr_t, the correct address might become wrong as C++ only guarantees that uintptr_t is the only integer type to withhold an address
  • If casting from double to float, the result might be int if the double value is too large for float to withhold
  • If casting between pointers with a static_cast(), we might get undefined behavior if the types aren't sharing a common base class

In order to make our code more ...

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.