Você pode usar ponteiros restritos para acessar o mesmo objeto em alguns casos?

A maioria das definições de restringir dizem que é uma promessa do programador para o compilador que, durante a vida útil do ponteiro, o ponteiro seja a única maneira de acessar esse objeto. Isso permite que o compilador otimize a saída, pois sabe que será acessado apenas por um ponteiro e, portanto, só pode ser alterado por ele. O que, se eu entendi corretamente, geralmente significa que o programa não precisa recarregar o valor para o qual o ponteiro aponta.

Se isso estiver correto, deve haver algumas exceções quando a palavra-chave restrita puder ser usada, mesmo se contrariar a intenção de como ela deve ser usada.

Uma coisa que vem à mente seria quando os dados apontados pelo ponteiro nunca mudam durante a vida útil do ponteiro. Nesse caso, não há necessidade de recarregar os dados, mesmo se os ponteiros apontarem para o mesmo local, porque eles não mudam durante a vida útil dos ponteiros. Por exemplo.:

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

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

Este é um uso válido de restrição, mesmo que seja contra como deveria ser usado? Usar a palavra-chave restrita como essa resulta em comportamento indefinido?

questionAnswers(2)

yourAnswerToTheQuestion