编译开关:-d1reportAllClassLayout
[color=#FF0000]注意:-d1,这里的是数字“1”,而不是小写的“L”。[/color]汗,我自己就犯了这个错误,老是被忽略掉,而不起作用!
另外,不是自己生成一个文件,在控制台编译时,他直接输出在了控制台窗口。所以在控制台编译时,我使用了重定位到文件:
E:\Programming\c_cpp>cl classA.cpp -d1reportAllClassLayout > class.layout
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
E:\Programming\c_cpp>
这个开关的作用是:
它可以让 MSVC 编译器(译注:至少是 MSVC 6.0 以上的版本)生成一个.layout 文件,在该文件中包含有大量的极具价值的类的布局信息,包括基类在派生类中的位置,虚函数表,虚基类表(virtual base class table),类的成员变量等信息.
以下面的代码生成示例如下:
#include
using namespace std;
class A{
private:
int a,b;
char ch;
public:
A(){
cout<<"调用构造函数\n";
a=2;
b=3;
}
~A(){
cout<<"调用析构函数\n";
}
void display(){
cout<<"a+b="< }
};
int main(){
A a;
a.display();
return 0;
}
生成的信息大致格式如下(其中属于系统调用的,我已经删除了,太多了):
class A size(12):
+---
0 | a
4 | b
8 | ch
| <alignment member> (size=3)
+---