-
default construction
- 4种情况下编译器会构造出nontrivial(有用)的构造函数
- 带有default construction的member class object
我们有两个class:
class Foo { public: Foo(), Foo(int) … };
class Bar { public: Foo foo; char *str;};
- 则编译器会在Bar中合成一个默认的构造函数(看起来像这样):
Bar() { foo.Foo::Foo(); }
- 当我们自己定义了Bar一个或以上的构造函数时,编译器会为我们扩张
每一个构造函数。比如我们自己定义:
Bar() { str = 0;}
则编译器就为我们扩张成:
Bar() { foo.Foo::Foo(); str = 0; }
- 当有多个需要初始化的成员时,编译器会按照成员的声明次序来初始化成员
- 带有default construction的base class
- 声明或继承一个virtual function的class
- 一个virtual function table 会被编译器产生出来,内放class的virtual function 地址。
- 在每个class object中,一个额外的pointer member(vptr)会被编译器合成出来,内含
相关的class vtbl的地址。
- 带有一个virtual base class的class
对于virtual base class中的成员变量,derived class通过存放一个指针,指针中存放
着对应的基类,用这样的方式来访问virtual base class中的成员变量。
所以为了初始化这些指针,编译器会默认构造出或扩张nontrivial构造函数做这些初
始化的工作。
- c++新手常见的两个误解
- 任何class如果没有定义default constructor,就会被合成出来。
- 编译器合成出来的default constructor会明确设定class内每个
datamember的默认值。
这两个没有一个是真的
-
相关阅读:
C++随笔
STM32调试总结
摄像头CMOS和CCD的比较
modelsim 中 WAVE窗口中能不能只显示变量名,而不显示路径
modelsim仿真xilinx mig ip core相关问题
modelsim仿真vivado自动化脚本
modelsim无法识别include文件的解决方法
UVM的类库
uvm
uvm
-
原文地址:https://www.cnblogs.com/boydfd/p/4983106.html
Copyright © 2020-2023
润新知