版本方法在同一个类中被另一个方法调用时的常量

时间:2017-03-12 20:46:27

标签: c++ c++11 const

我知道当存在具有相同名称和参数的方法的const和非const版本时,所选择的版本由* this的常量确定。 (方法的常量是签名权的一部分吗?)

但是当被另一种方法调用时会发生什么?

一个例子

class a{
   void b() const{
      c();
      //do fantastic things
   }
   const_iterator c() const;
   iterator c();
};

当我从a的非const实例调用b()时,我怎么知道调用哪个版本的c()?

2 个答案:

答案 0 :(得分:3)

从为类型声明为const的函数内部,您只能调用该类型的const函数。

答案 1 :(得分:3)

  

但是当被另一种方法调用时会发生什么?

与从外面打电话时的情况相同。

请注意,会员功能可以被描绘为,就像他们有一个不可见的第一个参数 T* this。对于const成员函数,T const* this

现在,这段代码:

class a{
   void b() const{
      c();
      //do fantastic things
   }
   const_iterator c() const;
   iterator c();
};

可以被认为是:

class a{
   void b(a const* this) const{ // pseudo code
      c(this); // pseudo code
      //do fantastic things
   }
   const_iterator c(a const* this) const; // pseudo code
   iterator c(a* this); // pseudo code
};

以下是const c版本的a const被调用,因为您&#34;传递它&#34;指向a的指针,而不指向 class Example extends React.Component{ constructor(){ super() this.state={ arr:[ 1,2,3 ], show : false } this.handleShow=this.handleShow.bind(this) } handleShow(){ this.setState ({ show:!this.state.show }) } render(){ this.state.arr.map(()=>console.log("niketh")) return(<div> {this.state.arr.map(()=> <div> <button onClick={this.handleShow}>click me</button> {this.state.show?<h1>this is text inside map</h1> :false } </div> )} </div> ) }} ReactDOM.render(<Example/>,document.getElementById('root'))