Killing Magic Numbers: «const int» против «constexpr int» (или нет разницы в конце)

Допустим, у меня есть magic number, от которого я хочу избавиться ...

//whatever.cpp

for (int i = 0; i < 42; i++)
{
    //...
}

Разумно я мог убить его двумя способами:

Либо с const int SOMETHING_SOMETHING_MEANING_OF_LIFE = 42
или с constexpr int SOMETHING_SOMETHING_MEANING_OF_LIFE = 42
в исходном файле .cpp .

Есть ли какая-либо значимая разница между этими двумя в этом случае (я вспоминаю, что компилятор сделал вывод, что - в любом случае - что значение не изменяется, и, таким образом, 42 фактически жестко закодировано в получающемся цикле / развернутом цикле / что угодно машинный код) или все сводится к личному вкусу?

В смежном вопросе: что, если magic number (и, следовательно, то, что его заменяет) было объявлено в файле заголовка (.h) вместо исходного (.ccp) файла - это что-то изменит (и если да, то как)?

13
задан CharonX 11 July 2019 в 19:02
поделиться