Можете ли вы использовать ограниченные указатели для доступа к одному и тому же объекту в некоторых случаях?

Большинство определений restrict говорят, что это обещание от программиста компилятору, что для времени жизни указателя указатель является единственным способом доступа к объекту. Это позволяет компилятору оптимизировать вывод, поскольку он знает, что к нему будет обращаться только один указатель, и поэтому он может быть изменен только им. Что, если я правильно понимаю, обычно означает, что программе не нужно перезагружать значение, на которое указывает указатель.

Если это правильно, то должно быть несколько исключений, когда ключевое слово restrict должно быть пригодным для использования, даже если оно противоречит цели его использования.

Одна вещь, которая приходит на ум, - это когда данные, на которые указывает указатель, никогда не изменяются в течение жизни указателя. В этом случае нет необходимости перезагружать данные, даже если указатели указывают на одно и то же местоположение, поскольку они не изменяются в течение времени жизни указателей. Например.:

int max(int *restrict a, int *restrict b) {
  return((*a > *b) ? *a : *b);
}

int main(void) {
  int num = 3;
  int max = max(&num, &num);
}

Является ли это допустимым использованием ограничения, даже если оно противоречит тому, как оно должно было использоваться? Приведет ли использование такого ключевого слова restrict к неопределенному поведению?