this 指針的類型分析
在 C 中,'this' 指針是一個特殊的指針,指向當前班級。它的類型是根據它使用的上下文來決定的。
成員函數中「this」指標的型別
在非常量成員函數中,型別'this' 只是類別的名稱,後面接著 *。例如,在名為ClassName 的類別中,其非常量方法中「this」的類型將為ClassName *.
Const 成員函數中「this」指標的類型
當在const 成員函數中使用時,「this」指標變成指向常數物件的指標。它的類型反映了這一點,成為 const ClassName *。這確保了物件不能透過“this”指針修改。
為什麼要讓「this」指標常數?
使「this」指標不變的主要原因const 成員函數中的指標常數是為了強制類別的 const 正確性。透過防止透過「this」指針修改對象,可以確保對象保持不變。這有助於維護類別資料的完整性並防止意外修改。
解釋錯誤
觀察到「this」指標的型別為 ClassName * const this在 Windows 中使用 VC 2008 是不正確的。 「this」指標不是左值,因此不能將 const 限定詞套用於星號 (*) 的右側。非常量成員函數中「this」的正確型別是 ClassName *。
內部實作細節
過去,有些編譯器使用了實作細節即使在非常量成員函數中,他們也將「this」指標解釋為常數指標。然而,這不符合 C 語言規範,因此已被包括 GCC 在內的大多數編譯器放棄。
C 11 Rvalue References 註釋
與由於在C 11 中引入了右值引用,因此可以透過仍然使用上述技巧的實現來檢測添加到「this ”指針的額外常數。這導致了該技術的棄用,因為它在使用右值引用時可能會導致錯誤。
以上是C 中「this」指標的正確類型是什麼:常數性和實作問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!