LINUX.ORG.RU

История изменений

Исправление 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)?