簡體   English   中英

const成員函數只能調用const成員函數嗎?

[英]const member functions can call const member functions only?

const成員函數僅調用const成員函數嗎?

class Transmitter{
  const static string msg;
  mutable int size;
  public: 
    void xmit() const{
    size = compute();
    cout<<msg;
  }
  private:
   int compute() const{return 5;}
};

 string const Transmitter::msg = "beep";

 int main(){
   Transmitter t;
   t.xmit();
   return EXIT_SUCCESS;
 }

如果我不使compute()為const,那么編譯器會抱怨。 是否因為const成員函數不允許修改成員而不允許對非const的調用,因為這意味着const成員函數將“間接”修改數據成員?

是否因為const成員函數不允許修改成員而不允許對非const的調用,因為這意味着const成員函數將“間接”修改數據成員?

是。

是的: const成員函數僅查看該類的const版本,這意味着編譯器將在const成員函數內找不到任何非const成員(數據或函數)。

此影響傳播到該類的const對象(實例),在該對象中只能訪問const成員。

如果正確應用const它將允許程序員檢查他對類的使用,並確保不會對任何不應更改的對象進行不必要的更改。

是。 當您調用'xmit()'時,其'this'指針將為const,這意味着您無法再從那里調用非const方法,因此'compute()'必須為const

正如其他人所說的; 是。

如果出於某些特殊原因,您希望計算為非const,例如,如果它使用一些本地緩存來存儲計算,那么您仍然可以通過聲明const版本,從其他聲明為const的函數中調用它

  private:
       int compute() const{return ( const_cast<Transmitter*>(this)->compute());}
       int compute() {return 5;}

您的主張和分析都是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM