История изменений
Исправление quasimoto, (текущая версия) :
Я два варианта написал — на C++ и на C.
Компилятор без тебя это умеет.
Компилятор не умеет в автоматическую const-correctness. Если вещь предполагается константной — ставим const. Различие constexpr/const тут не принципиально, из constexpr следует const, const можно использовать в качестве constexpr, в данном случае это намёк на то что подразумевается больше «constant expression», чем «constant object».
да и не для этого оно
У нас есть 100500l, 100500ll и т.п. суффиксы, int(100500), uint64_t(100500) и т.п. конструкторы, так что я намекаю на важность использования таких суффиксов и конструкторов, чтобы неявными приведениями не получить int (стандартный тип для обычных числовых целых литералов) и не осечься — (1 << ...) будет сдвигать в int, а нам может быть нужно больше, pow<2>(100500 + 1) вызовет специализацию для int, а нам нужно pow<2>(uint64_t(100500) + 1) — для uint64_t. Дальше была тема про вынесение магической uint64_t(100500) в именованную сущность — вот auto score = uint64_t(100500);, или uint64_t score = 100500;, но наверно не uint64_t score = uint64_t(100500);.
а это ещё что за ☣?
http://en.cppreference.com/w/c/types/integer
слушай, ты вообще на каком ЯП пишешь
Этот кусок — обычный C++ (не 11).
На кой ляд так делать?
А как надо? pow(score + 1, 2), pow_2(score + 1), square(score + 1) или (score + 1) * (score + 1)?
Исходная версия quasimoto, :
Я два варианта написал — на C++ и на C.
Компилятор без тебя это умеет.
Компилятор не умеет в автоматическую const-correctness. Если вещь предполагается константной — ставим const. Различие constexpr/const тут не принципиально, из constexpr следует const, const можно использовать в качестве constexpr, в данном случае это намёк на то подразумевается больше «constant expression», чем «constant object».
да и не для этого оно
У нас есть 100500l, 100500ll и т.п. суффиксы, int(100500), uint64_t(100500) и т.п. конструкторы, так что я намекаю на важность использования таких суффиксов и конструкторов, чтобы неявными приведениями не получить int (стандартный тип для обычных числовых целых литералов) и не осечься — (1 << ...) будет сдвигать в int, а нам может быть нужно больше, pow<2>(100500 + 1) вызовет специализацию для int, а нам нужно pow<2>(uint64_t(100500) + 1) — для uint64_t. Дальше была тема про вынесение магической uint64_t(100500) в именованную сущность — вот auto score = uint64_t(100500);, или uint64_t score = 100500;, но наверно не uint64_t score = uint64_t(100500);.
а это ещё что за ☣?
http://en.cppreference.com/w/c/types/integer
слушай, ты вообще на каком ЯП пишешь
Этот кусок — обычный C++ (не 11).
На кой ляд так делать?
А как надо? pow(score + 1, 2), pow_2(score + 1), square(score + 1) или (score + 1) * (score + 1)?