Czy w niektórych przypadkach można użyć ograniczonych wskaźników, aby uzyskać dostęp do tego samego obiektu?

Większość definicji ograniczenia mówi, że jest to obietnica ze strony programisty dla kompilatora, że ​​przez cały czas życia wskaźnika wskaźnik jest jedynym sposobem uzyskania dostępu do obiektu. Pozwala to kompilatorowi zoptymalizować dane wyjściowe, ponieważ wie, że dostęp do nich będzie miał tylko jeden wskaźnik, a zatem może być zmieniany tylko przez niego. Jeśli dobrze rozumiem, zazwyczaj oznacza to, że program nie musi przeładowywać wartości wskazywanej przez wskaźnik.

Jeśli jest to poprawne, powinny istnieć wyjątki, gdy słowo kluczowe „ograniczenie” powinno być użyteczne, nawet jeśli jest sprzeczne z intencją, w jaki sposób powinno być używane.

Jedną rzeczą, która przychodzi do głowy, jest to, że dane wskazywane przez wskaźnik nigdy nie zmieniają się w czasie życia wskaźnika. W takim przypadku nie ma potrzeby ponownego ładowania danych, nawet jeśli wskaźniki wskazują na tę samą lokalizację, ponieważ nie zmieniają się w czasie życia wskaźników. Na przykład.:

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

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

Czy jest to prawidłowe użycie ograniczenia, nawet jeśli jest sprzeczne z tym, jak miało być używane? Czy użycie tego słowa kluczowego w ten sposób spowoduje niezdefiniowane zachowanie?

questionAnswers(2)

yourAnswerToTheQuestion