下面这个程序不见得在每种编译器上都能通过编译,既使通过了编译,也不见得可以成功运行并输出结果。
让人欣慰,更让人郁闷的是:它在我的Visual Studio 2005 SP1中,既能顺利编译,也能正常运行。
它虽然投机取巧,胡作非为,蝇营狗苟,横行霸道。但它至少能引发你的思考,加深一点你对this指针的理解,如果你还不是十分理解的话。
#include <iostream>
using namespace std;
#pragma warning(disable:4213)
class A {
public:
int i;
A() : i(0) {}
void f(A&);
};
void A::f(A& o){
reinterpret_cast<A*>(this) = &o;
i = 100;
}
int main() {
A a, b;
a.f(b);
cout << "a.i = " << a.i << endl;
cout << "b.i = " << b.i << endl;
}