Поддержка проверки размеров времени компиляции является единственным оправданием.
auto force = 2_N;
auto dx = 2_m;
auto energy = force * dx;
assert(energy == 4_J);
См., например, PhysUnits-CT-Cpp11 , небольшую библиотеку заголовков C ++ 11, C ++ 14 для анализа размерности во время компиляции и модуля / количественные манипуляции и преобразования. Упрощенный, чем Boost.Units , поддерживает единицы символа литералы, такие как метрические префиксы m, g, s, , такие как m, k, M, зависит только от стандартной библиотеки C ++, SI-only, целых степеней размеров.
Из-за тебя вернись char*
или NULL
. Вы не можете приводить указатели к не указательным типам. Теперь должна быть ошибка при компиляции. Ваша функция должна вернуть char*
.
Вы не можете привести char*
к int*
, поскольку int выделяет больше памяти в памяти, поэтому память должна быть перераспределена, это должно быть сделано вручную.