GNU C и C ++ предлагают атрибуты функций const
и pure
. Из онлайн-документов gnu (выделено мной):
В GNU C и C ++ вы можете использовать атрибуты функций для указания определенных свойств функций, которые могут помочь компилятору оптимизировать вызовы или проверять код внимательнее для правильности. Например, вы можете использовать атрибуты, чтобы указать, что функция никогда не возвращает (noreturn), возвращает значение, зависящее только от значений своих аргументов (const) , или имеет аргументы в стиле printf (формат).
Там, где атрибут const кажется надмножеством чистого, также взятым из gnu docs :
Атрибут const накладывает большие ограничения на определение функции чем аналогичный чистый атрибут. Диагностируется одна и та же функция с атрибутом const и pure.
В C ++ 11 был добавлен спецификатор constexpr
.
При применении для функций, есть ли разница между атрибутом const и спецификатором constexpr? G CC применяет различные оптимизации?
Аналогичный вопрос звучит так: Разница между `constexpr` и` const` . Но я думаю, что это не дубликат. Мой вопрос касается именно атрибута функции const
, который, кажется, имеет перекрывающуюся функциональность с constexpr
.