注:爲了澄清,問題不在於對一般使用restrict
關鍵字,但特別地約其施加到構件用作描述here。限制上成員函數限定符(限制此指針)
GCC允許您使用的__restrict__
(GNU的++相當於C99的restrict
)限定符上的成員函數,有效地使this
一個限制的功能的範圍內合格指針。牛肉在哪裏?
大多數成員函數都在其他成員上工作,通過this
訪問它們,這是一個T* const
(通常是unaliased)。對於this
可能是別名,需要在成員函數中使用第二個指向類型的指針,並且它必須來自某處。
這就是非成員函數的情況,比如所有的二元運算符或者至少需要兩個指針或引用相同的非平凡類型的任何其他自由函數。但是,這些功能沒有this
,所以它們不相關。
賦值運算符,拷貝構造,和一元比較運算符其中this
可以原則上被混疊(因爲另一個目的通過引用傳遞)的成員函數的實例。因此,爲這些分配一個限制限定符纔有意義 - 編譯器應該已經很清楚所有其他函數都具有restrict屬性(因爲從來沒有第二個指針指向T)。現在
,例如,如果您使用的restrict
上operator=
你應該必然不檢查自賦值可言,因爲你說this
沒有該功能(和的範圍內,別名,如果這是真的,不可能發生自我分配)。
顯然,這是你事先不可能知道的事情,也是沒有道理的。
那麼,如果真的想給成員函數一個限定符限定符並且它有意義,那麼會出現什麼情況呢?
我認爲這樣做沒有任何意義。你會用'this'進行去鋸齒 - 它不是一個真正的連續的相同類型的數組嗎? – Anycorn
@Anycom:如果這個類有數據成員,任何兼容的指針都可以是一個數據成員的別名。 – MSalters