Просто интересно: когда я добавляю ограничение на указатель, я говорю компилятору, что указатель не является псевдонимом для другого указателя. Предположим, что у меня есть такая функция, как:
// Constructed example
void foo (float* result, const float* a, const float* b, const size_t size)
{
for (size_t i = 0; i < size; ++i)
{
result [i] = a [0] * b [i];
}
}
Если компилятор должен предположить, что result
может перекрываться с a
, он должен каждый раз обновлять его. Но, поскольку a
отмечен const
, компилятор также может предположить, что a является фиксированным, и, следовательно, выборка один раз в порядке.
Вопрос: в такой ситуации, как рекомендуемый способ работы с ограничениями? Я, конечно, не хочу, чтобы компилятор возвращал a
каждый раз, но я не мог найти хорошую информацию о том, как restrict
должен работать здесь.