请查看此代码段
#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)
引用相同的变量。是编译器优化吗?