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成员函数不允许修改成员,所以它不允许 任何对非consts的调用,因为它意味着const成员函数将“间接”修改数据成员?
答案 0 :(得分:4)
是不是因为不允许const成员函数修改成员,所以它不允许任何对非consts的调用,因为这意味着const成员函数将“间接”修改数据成员?
是
答案 1 :(得分:2)
是:const
成员函数只能看到类的const
版本,这意味着编译器在{{{{}}内找不到任何非const
成员(数据或函数) 1}}成员函数。
此效果传播到类的const
个对象(实例),只能访问const
个成员。
正确应用后,const
将允许程序员检查他对类的使用,并确保不会对任何不应更改的对象进行不必要的更改。
答案 2 :(得分:1)
是。当你调用'xmit()'时,它的'this'指针将是const,这意味着你不能从那里调用非const方法,因此'compute()'必须是const
答案 3 :(得分:1)
正如其他人所说;是
如果有一个特殊的原因你想要计算非const,例如,如果它使用一些本地缓存来存储计算,那么你仍然可以通过声明一个const版本
private:
int compute() const{return ( const_cast<Transmitter*>(this)->compute());}
int compute() {return 5;}
答案 4 :(得分:1)
您的断言和分析都是正确的。