今天我在使用参考资料时看到了非常奇怪的事情。
只是一个简单的例子:
#include <iostream>
struct Base {
enum Type {
FOO = 0,
BAR = 1
};
virtual ~Base() {}
virtual Type type() const = 0;
int value_;
};
struct Foo : Base {
Foo() { value_ = 33; }
virtual Type type() const { return FOO; }
};
struct Bar : Base {
Bar() { value_ = 44; }
virtual Type type() const { return BAR; }
};
int main() {
Foo foo;
Bar bar;
Base & b = foo;
std::cout << b.type() << ", " << b.value_ << "\n";
b = bar;
std::cout << b.type() << ", " << b.value_ << "\n";
return 0;
}
你认为输出会是什么?看到的时候真的很惊喜:
0, 33
0, 44
在 VS 2010、mingw 4.6、gcc 4.3 上测试。那么,可能知道这个魔法的秘密吗?