為什么靜態成員函數不能是const(轉)


static在c++中的第五種含義:用static修飾不訪問非靜態數據成員的類成員函數。這意味着一個靜態成員函數只能訪問它的參數、類的靜態數據成員和全局變量。
   不能用const的原因:
     這是C++的規則,const修飾符用於表示函數不能修改成員變量的值,該函數必須是含有this指針的類成員函數,函數調用方式為thiscall,而類中的static函數本質上是全局函數,調用規約是__cdecl或__stdcall,不能用const來修飾它。<span style="line-height:26px">一個靜態成員函數訪問的值是其參數、靜態數據成員和全局變量,而這些數據都不是對象狀態的一部分。而對成員函數中使用關鍵字const是表明:函數不會修改該函數訪問的目標對象的數據成員。既然一個靜態成員函數根本不訪問非靜態數據成員,那么就沒必要使用const了。</span>
   什么時候使用靜態數據成員和靜態函數呢?
      定義數據成員為靜態變量,以表明此全局數據邏輯上屬於該類。
      定義成員函數為靜態函數,以表明此全局函數邏輯上屬於該類,而且該函數只對靜態數據、全局數據或者參數進行操作,而不對非靜態數據成員進行操作。
 
   static的第一種含義:修飾全局變量時,表明一個全局變量只對定義在同一文件中的函數可見。
   static的第二種含義:修飾局部變量時,表明該變量的值不會因為函數終止而丟失。
   static的第三種含義:修飾函數時,表明該函數只在同一文件中調用。
   static的第四種含義:修飾類的數據成員,表明對該類所有對象這個數據成員都只有一個實例。即該實例歸 所有對象共有。
   static的第五種含義:修飾類成員函數,如上。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM