Как заголовок спрашивает: возможно ли, чтобы функция constexpr вызывалась не более одного раза во время компиляции?Возможно ли, чтобы функция constexpr вызывалась не более одного раза во время компиляции?
Это явно не возможно, если функция не является constepxr; Я мог бы написать функцию, которая вызывается всякий раз, когда я нажимаю клавишу пробела, поэтому компилятор никогда не мог понять это во время компиляции.
выражения или функции constexpr не имеют побочных эффектов, поэтому не имеет значения, как часто они вызываются (за исключением времени исполнения/производительности). Итак, почему вы хотите убедиться, что constexpr оценивается только один раз? –
@WernerHenze «Итак, почему вы хотите убедиться, что constexpr оценивается только один раз?» просто любопытство и найти границы языка :-) – rwols
@rwols: Проблема в том, что «вызов только один раз» представляет собой бессмысленное понятие для функции 'constexpr' во время компиляции. Его можно буквально называть полтора раза (!) - реализация может кэшировать оценку выражений constexpr, и это может включать частичное кэширование. – MSalters