看effective c++的一个问题
effective 2/e中文版,条款17中在讨论怎么定义派生类的assignment操作符的时候,在一个例子中:其中Base是基类,Derived是派生类,基类有int x,派生类有int y;
Derived & Derived::operator=(const Derived &rhs)
{
if(this==&rhs)
return *this;
static_case <Base&> (*this)=rhs;
y=rhs.y;
return *this;
}
里面说,static_case <Base&> (*this)=rhs;这句中的 <> 中必须为Base&,不能为Base,如果是一个Base object,那么导致调用一个base的copy constructor,构造一个新的对象,assignment的对象就变成了新构造的对象了,*this将不动。
我理解了一下,如果是转换为base&的引用的话,static_case <Base&> (*this)返回的就是对*this的引用,所有当所做改动针对是*this.
但是如果是static_case <Base> (*this)=rhs;的话,就会产生一个Base的临时对象,我不明白的是为什么会产生这个临时对象呢???
[解决办法]
可以这样理解:
int i;
static_case <float> (i); //如果不产生float的临时对象,你能指望在原来i的内存区中放下一个 float数么?
[解决办法]
float f;
static_cast <int> (f) 相当于 int(f)
static_cast <Base> (*this) 相当于 Base(*this)
[解决办法]
<base> (*this)
<bsae&> (*this)的区别应该和
<int> x和
<int&> x的区别一样撒,别换了马甲你就糊涂了萨