Я использовал атрибуты gcc const
и pure
для функций, возвращающих указатель на " постоянные »данные, которые выделяются и инициализируются при первом использовании, т.е. когда функция будет возвращать одно и то же значение при каждом вызове. В качестве примера (не мой случай использования, а хорошо известный пример) подумайте о функции, которая выделяет и вычисляет таблицы поиска триггеров при первом вызове и просто возвращает указатель на существующие таблицы после первого вызова.
Проблема : Мне сказали, что такое использование неверно, потому что эти атрибуты запрещают побочные эффекты, и что компилятор может даже полностью оптимизировать вызов в некоторых случаях, если возвращаемое значение не используется. Безопасно ли мое использование атрибутов const
/ pure
, или есть какой-либо другой способ сообщить компилятору, что вызовы функции N> 1
эквивалентны 1 вызов функции, но этот 1 вызов функции не эквивалентен 0 вызовам функции? Или другими словами, что у функции есть побочные эффекты только при первом вызове?