Просто интересно: когда я добавляю ограничение на указатель, я говорю компилятору, что указатель не является псевдонимом для другого указателя. Предположим, что у меня есть такая функция, как:
// 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 должен работать здесь.