Конструкторы класса C++ квалифицированы как __attribute__((pure)) или __attribute__((const))

Можно и нужно объявлять конструкторы класса C++ __attribute__((pure)) если они только могут получить данные через его параметры? И в каких случаях они должны быть квалифицированы как __attribute__((const))?

1 ответ

Решение

GCC предупреждает, когда вы квалифицируете конструкторов как pure или же const, Это потому, что конструктор ничего не возвращает (возвращает void) и не имеет особого смысла иметь pure или же const атрибуты на такие функции.

Смотрите демоверсию Godbolt здесь.

<source>:3:30: warning: 'pure' attribute on function returning 'void' [-Wattributes]
     A()  __attribute__((pure));

                              ^
<source>:8:31: warning: 'const' attribute on function returning 'void' [-Wattributes]
     B()  __attribute__((const));                               ^

Из документации GCC:

Const
...
Поскольку у const-функции не может быть никаких побочных эффектов, для такой функции не имеет смысла возвращать void. Объявление такой функции диагностируется.

чистый
...
Поскольку чистая функция не может иметь никаких побочных эффектов, для такой функции не имеет смысла возвращать void. Объявление такой функции диагностируется.

Другие вопросы по тегам