注意:为了澄清,问题不是关于restrict
关键字的一般使用,而是具体关于将其应用于成员函数,如此处所述。
gcc 允许您在成员函数上使用__restrict__
(相当于 C99 的 GNU++ restrict
)限定符,有效地this
在函数范围内创建一个限制限定指针。牛肉在哪里?
大多数成员函数在其他成员上工作,通过 访问它们this
,这是一个T* const
(并且通常是无别名的)。为了this
可能被别名,需要在成员函数中以某种方式使用第二个指向类型的指针,并且它必须来自某个地方。
这是非成员函数经常出现的情况,例如所有二元运算符或任何其他自由函数,它们至少需要两个相同的非平凡类型的指针或引用。但是,这些函数没有 a this
,因此它们不相关。
赋值运算符、复制构造函数和一元比较运算符是原则上可以使用别名的成员函数的示例this
( 因为另一个对象是通过引用传递的)。因此,为这些分配一个限制限定符才真正有意义——编译器应该已经很明显所有其他函数都具有限制属性(因为从来没有第二个指向 T 的指针)。
现在,例如,如果您使用restrict
onoperator=
您应该因此根本不检查自分配,因为您说的this
是在该函数的范围内没有别名(如果这是真的,则不可能发生自分配)。
显然,这是你不可能事先知道的事情,也是没有意义的事情。
那么,在什么情况下,人们实际上想要给成员函数一个限制限定符,并且它在哪里有意义?