Мне трудно понять, что означает restrict
с точки зрения вызова функций с уже ограниченными переменными.
Википедия говорит мне:
Ключевое слово limited — это заявление о намерениях, данное программистом компилятору. В нем говорится, что в течение всего времени существования указателя только он или значение, непосредственно полученное из него (например, указатель + 1), будет использоваться для доступа к объекту, на который он указывает.
У меня есть эти три примера функций:
void a(int const *p1, int const *p2) {
...
}
void b(int *restrict p1, int *restrict p2) {
...
}
void c(int *p1, int *p2) {
...
}
и я бы назвал их каждый из функции
foo(int *restrict p1, int *restrict p2) {
a(p1, p2);
b(p1, p2);
c(p1, p1+1);
}
кто из них сдержит restrict
обещание, данное объявлением функции foo
?
Три случая будут:
Функция
a
ничего не изменяет, так что это, безусловно, верно.Как насчет
b
, его параметры "непосредственно получены" из указателейfoo
? Нарушу ли я обещание, данное вfoo
декларации, если я изменюp1
илиp2
вb
?Изменится ли ситуация в
c
по сравнению с предыдущим сценарием, если параметры никак не ограничиваются, и я редактирую например п2 вc
?