ограничить тип возвращаемого значения и локальные переменные

Я хорошо понимаю, когда использовать ограничение для аргументов функции. Но все статьи, которые я нашел до сих пор, никогда не упоминают другие объявления (такие как возвращаемые значения функции и локальные переменные).

Вот один пример:

extern int *alloc_foo(void);
extern int *alloc_bar(void);

int *foo = alloc_foo();
foo[i] = 42;
int *bar = alloc_bar();
f(foo[i]);

Если alloc_foo() и alloc_bar() гарантированно возвращают адреса без псевдонимов (например, если есть обертки для malloc), должен ли я заставить их возвращать ограничение? Должен ли я ограничивать foo и bar?


person martinkunev    schedule 31.01.2015    source источник


Ответы (1)


Возврат restrict не имеет смысла, как и возврат const или volatile. Это связано с тем, что возвращаемое значение функции является чисто выражением value ("rvalue"), а не выражением, обозначающим объект ("lvalue"). Я не знаю, как закодировать знание отсутствия алиасинга в типе функции без атрибутов GCC (при этом вы можете пометить функцию как malloc-подобную), но вызывающая сторона может сохранить результат в указателе с указанием restrict. object и тем самым дать компилятору это знание.

person R.. GitHub STOP HELPING ICE    schedule 01.02.2015