В виде копипаста,
Вобщем, понятно, сводится к "пока обернуть memcpy и ждать пока появится стандартный bit_cast", что вполне обосновано в случае проектов вроде v8.
Замечу, что процитированный мной пример из C.183(
это правило из стандартных рекомендаций от 16 июня сего года, где редактор сам Страуструп.)
Полагаю, что если они рекомендуют использовать reinterpret_cast
в подобных случаях, то наверное не просто так.
При этом, вроде как понятно, что не надо так делать вообще.
Цитата:
Accessing the result of an reinterpret_cast to a different type from the objects declared type is defined behavior (even though reinterpret_cast is discouraged), but at least we can see that something tricky is going on.
Реально, для каких целей вынимать байты из long/int ?
Там есть рекомендации по безопасности типов вроде
Цитата:
Type safety profile summary:
Type.1: Avoid casts: a. Don’t use reinterpret_cast; A strict version of Avoid casts and prefer named casts. b. Don’t use static_cast for arithmetic types; A strict version of Avoid casts and prefer named casts. c. Don’t cast between pointer types where the source type and the target type are the same; A strict version of Avoid casts. d. Don’t cast between pointer types when the conversion could be implicit; A strict version of Avoid casts.
Type.2: Don’t use static_cast to downcast: Use dynamic_cast instead.
Type.3: Don’t use const_cast to cast away const (i.e., at all): Don’t cast away const.
Type.4: Don’t use C-style (T)expression or functional T(expression) casts: Prefer construction or named casts.
Type.5: Don’t use a variable before it has been initialized: always initialize.
Type.6: Always initialize a member variable: always initialize, possibly using default constructors or default member initializers.
Type.7: Avoid naked union: Use variant instead.
Type.8: Avoid varargs: Don’t use va_arg arguments.
http://isocpp.github.io/CppCoreGuidelin ... ty-profileAvoid casts- отдельным правилом.
И там рекомендуются альтернативы:
Цитата:
Note
If you feel the need for a lot of casts, there may be a fundamental design problem.
....
Alternatives
Casts are widely (mis) used. Modern C++ has rules and constructs that eliminate the need for casts in many contexts, such as
Use templates
Use std::variant
Rely on the well-defined, safe, implicit conversions between pointer types
Про memcpy, там нет, но очевидно, что она не безопасна, оно ещё со времен С были стандартные советы её избегать, в С++ чтобы включить про неё в рекомендации(чтобы не использовали) давно поднимали вопрос, но есть случаи где она нужна.