атрибуты функции pure / const в разных компиляторах

Чистый - это атрибут функции, который говорит, что функция не изменяет никакую глобальную память.
Const - это атрибут функции, который говорит, что функция не читает и не изменяет глобальную память.

Получив эту информацию, компилятор может выполнить некоторые дополнительные оптимизации.

Пример для GCC:

float sigmoid(float x) __attribute__ ((const));

float calculate(float x, unsigned int C) {
    float sum = 0;
    for(unsigned int i = 0; i < C; ++i)
        sum += sigmoid(x);
    return sum;
}

float sigmoid(float x) { return 1.0f / (1.0f - exp(-x)); }

В этом примере компилятор может оптимизировать функцию Высчитывает to:

float calculate(float x, unsigned int C) {
    float sum = 0;
    float temp = C ? sigmoid(x) : 0.0f;
    for(unsigned int i = 0; i < C; ++i)
        sum += temp;
    return sum;
}

Или если ваш компилятор достаточно умен (и не так уж строг в отношении чисел с плавающей точкой):

float calculate(float x, unsigned int C) { return C ? sigmoid(x) * C : 0.0f; }

Как я могу пометить функцию таким образом для различных компиляторов, то есть GCC, Clang, ICC, MSVC или других?

Ответы на вопрос(2)

Ваш ответ на вопрос