Работает ли функция __attribute__s GCC с виртуальными функциями?

Компилятор GCC C++ предлагает семейство расширений через атрибуты функций, такие как:

int square(int) __attribute__((const));

В частности, два атрибута. , constи pureпозволяют объявить, что оценка функции не имеет побочных эффектов и зависит только от ее аргументов ( const) или только от ее аргументов. и глобальные переменные (pure). Это позволяет исключить общие подвыражения, что может привести к тому, что такая функция будет вызываться меньше раз, чем написано в коде.

Мой вопрос заключается в том, можно ли это безопасно, правильно и разумно использовать для виртуальных функций-членов:

struct Foo
{
    virtual int square(int) __attribute__((pure));   // does that make sense?
};

Имеет ли это какую-либо разумную семантику? Это вообще разрешено? Или просто игнорируется? Боюсь, я не могу найти ответ на этот вопрос в документации GCC.

Причина этого вопроса в том, что существует семейство опций компилятора -Wsuggest-attribute, которые заставляют GCC предлагать варианты размещения этих атрибутов для улучшения кода. Тем не менее, кажется, что в конечном итоге эти предложения делаются даже для виртуальных функций, и мне интересно, следует ли воспринимать эти предложения всерьез.

11
задан Richard JP Le Guen 14 March 2013 в 02:50
поделиться