虚函数和static_cast

时间:2017-09-28 23:40:59

标签: c++ virtual-functions static-cast

请查看此代码段

#include <iostream>
using namespace std;

class foo{
    public:
    virtual void v1(){
        std::cout << "In Base this:" << std::hex << this << "\n";   
    }
};

class bar:public foo{
    public:
    void v1() {
        std::cout << "In Derived this:" << std::hex << this << "\n";
    }
};

int main() {
    bar a, b, c;
    static_cast<foo*>(&a)->v1();
    static_cast<foo*>(&b)->v1();
    static_cast<foo*>(&c)->v1();
    static_cast<foo>(b).v1();
    static_cast<foo>(b).v1();
    return 0;
}

输出

In Derived this:0x7ffe8a9e8890
In Derived this:0x7ffe8a9e88a0
In Derived this:0x7ffe8a9e88b0
In Base this:0x7ffe8a9e88c0
In Base this:0x7ffe8a9e88c0

this指针static_cast<foo>(b)的值可以看出,创建了一个全新的变量。

此外,对static_cast<foo>(b)的进一步调用是指先前创建的变量。

有人可以解释这种行为。

修改: 从评论中我得到static_cast<foo>(b)创建新变量的原因。我仍然无法理解的是,为什么多次调用static_cast<foo>(b)引用相同的变量。是编译器优化吗?

0 个答案:

没有答案