⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reinterp.cpp

📁 希望我提供的代码对大家有帮助
💻 CPP
字号:
//: C24:Reinterp.cpp

// From Thinking in C++, 2nd Edition

// Available at http://www.BruceEckel.com

// (c) Bruce Eckel 1999

// Copyright notice in Copyright.txt

// Reinterpret_cast

// Example depends on VPTR location,

// Which may differ between compilers.

#include <cstring>

#include <fstream>

using namespace std;

ofstream out("reinterp.out");



class X {

  static const int sz = 5 ;

  int a[sz];

public:

  X() { memset(a, 0, sz * sizeof(int)); }

  virtual void f() {}

  // Size of all the data members:

  int membsize() { return sizeof(a); }

  friend ostream&

    operator<<(ostream& os, const X& x) {

      for(int i = 0; i < sz; i++)

        os << x.a[i] << ' ';

      return os;

  }

  virtual ~X() {}

};



int main() {

  X x;

  out << x << endl; // Initialized to zeroes

  int* xp = reinterpret_cast<int*>(&x);

  xp[1] = 47;

  out << x << endl; // Oops!



  X x2;

  const int vptr_size= sizeof(X) - x2.membsize();

  long l = reinterpret_cast<long>(&x2);

  // *IF* the VPTR is first in the object:

  l += vptr_size; // Move past VPTR

  xp = reinterpret_cast<int*>(l);

  xp[1] = 47;

  out << x2 << endl;

} ///:~

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -