const成员函数只能调用const成员函数吗?

时间:2011-01-06 11:38:10

标签: c++ const-method

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成员函数将“间接”修改数据成员?

5 个答案:

答案 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)

您的断言和分析都是正确的。