现在的位置: 首页 > 综合 > 正文

C++_cast

2013年03月05日 ⁄ 综合 ⁄ 共 907字 ⁄ 字号 评论关闭

cast

1. 介绍各种cast(Effective C++ E3, P117)
 const_cast通常被用来将对象的常量性转除,唯一有此能力;
 dynamic_cast用来执行“安全向下转型”;
 reinterpret_cast执行低级转型,不可移植。例如将一个pointer to int 转型为一个int。(static_cast不能胜任)
 static_cast用来强迫隐式转换,例如将no-const对象转为const对象,或将int转为double,将void*指针转为typed指针,将pointer-to-base转为pointer-to-derived。可以看作“利用原值重建一个临时对象,并在设立初值时使用型别转换”(The C++SLibrary, P19)
2. static_cast用法题目
1) 分析结果:(Effective C++ E3, P119)
class Base
{
    int x;
public:
    virtual void SetMe(int x)
    {
        this->x = x;
    }
    void Print()
    {
        cout << x << endl;
    }
};

class Derived : public Base
{
    int y;
public:
    virtual void SetMe(int y)
    {
        static_cast<Base>(*this).SetMe(y);
        this->y = y;
    }
    void Print()
    {
        Base::Print();
        cout << y << endl;
    }
};

int main( void )
{
    Derived d;

    d.SetMe(100);
    d.Print();

    return 0;
}  
解释:
输出:
-858993460
100
这一行static_cast<Base>(*this).SetMe(y);调用的不是当前对象上的函数,而是转型动作所建立的一个”this对象之base class成分”的临时副本上的SetMe。正确的做法是将其改为Base:: SetMe();

抱歉!评论已关闭.