我知道当存在具有相同名称和参数的方法的const和非const版本时,所选择的版本由* this的常量确定。 (方法的常量是签名权的一部分吗?)
但是当被另一种方法调用时会发生什么?
一个例子
class a{
void b() const{
c();
//do fantastic things
}
const_iterator c() const;
iterator c();
};
当我从a的非const实例调用b()时,我怎么知道调用哪个版本的c()?
答案 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
被调用,因为您"传递它"指向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'))
。