Примечание: Для пояснения вопрос не об использовании ключевого слова restrict
в целом, а о применении его к функциям-членам, как описано здесь .
gcc позволяет вам использовать __restrict__
(GNU ++, эквивалентный restrict
) в C99 для функции-члена, что фактически делает this
ограниченным квалифицированным указателем в области действия функции.Где говядина?
Большинство функций-членов работают с другими членами, получая к ним доступ через this
, то есть T* const
(и обычно не сглаженные).Чтобы this
мог быть псевдонимом, в функции-члене каким-то образом должен использоваться второй указатель на тип, и он должен откуда-то приходить.
Это ситуация, которая регулярно имеет местос функциями, не являющимися членами, такими как, например, все бинарные операторы или любая другая свободная функция, которая принимает как минимум два указателя или ссылки идентичного нетривиального типа.Однако эти функции не имеют this
, поэтому они не имеют отношения.
Оператор присваивания, конструктор копирования и унарные операторы сравнения являются примерами функций-членов, где this
может в принципе быть псевдонимом (поскольку другой объект передается по ссылке).Так что на самом деле имеет смысл присваивать им ограничивающий квалификатор - для компилятора уже должно быть очевидно, что все остальные функции в любом случае имеют свойство restrict (потому что никогда не бывает второго указателя на T).
Теперь, если, например, вы использовали restrict
на operator=
, вы должны последовательно вообще не проверять самопредставление, потому что вы говорите, что this
не является псевдонимом в области действия.эта функция (и , если это правда , самоопределение не может произойти).
Очевидно, это то, что вы не можете знать заранее, и это тоже не имеет смысла.
Итак, что было бы в случае, когда кто-то действительно хотел бы дать функции-члену ограничительный квалификатор и где это имеет смысл?