首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 靜態成員函數不能聲明 const:無 this 指針無法綁定常量性

     編輯:程式設計疑難解答

標準原文

《C++ Primer》第 5 版 P269:靜態成員函數不與任何對象綁定,**無 this 指針**,故不能聲明 const,也不能在函數體內使用 this。

深層原因

  1. const 修飾非靜態成員函數時,作用於隱式參數 this:Class* const → const Class* const,承諾不修改對象狀態。
  2. 靜態成員函數**本質是普通函數**(調用約定 __cdecl),**無隱式 this**,無對象可承諾不修改。
  3. 非靜態成員函數調用約定 __thiscall(this 通過 ECX/RCX 傳遞),靜態成員無此約定。

對比表

特性非靜態成員函數靜態成員函數
隱式參數this (Class*)無
可聲明 const是否
可訪問非靜態成員是否(需對象實例)
調用語法obj.func() / ptr->func()Class::func() / obj.func()

理解「無 this 即無 const」,靜態成員函數設計意圖一目了然。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved