能够在无效指针上调用非虚拟成员函数甚至可以在指针本身中编码与对象关联的信息。例如:
#include <iostream>
class MagicInteger {
public:
static MagicInteger* fromInt (int x) {
return reinterpret_cast<MagicInteger*>(x);
}
int getValue() {
return static_cast<int>(reinterpret_cast<intptr_t>(this));
}
private:
// forbid messing around
MagicInteger ();
MagicInteger (MagicInteger&);
MagicInteger& operator=(const MagicInteger&);
};
int main (void) {
MagicInteger* i = MagicInteger::fromInt(6);
std::cout << "Value is " << i->getValue() << std::endl;
return 0;
}
这也可以用于实现标记指针,即包含有关被指点的元信息的指针。
这两个成语在 Google Chrome 的 javascript VM V8 中用于表示 31 位整数