[英]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.