在 C# 中要说类
默认给我们定义的特殊成员函数,莫过于 构造函数
,但在 C++ 中这样的特殊函数高达 6 种,有必要整合一下聊一聊。
和 C# 一样,很多书中都说,如果用户没有定义 构造函数
,那么编译器会给我们定义一个,参考下面的例子:
class Person {public:string name;int age;
};int main()
{Person person;
}
接下来观察下汇编代码,看下有没有调用 默认构造函数
.
Person person;
003E32EF lea ecx,[person]
003E32F2 call Person::Person (03E15EBh)
对于 C# 学习者来说有点懵哈,定义了就相当于new了, 哈哈,这是因为 C++ 默认都是值类型哈,不过这里有必要澄清一下,并不一定所有情况都会调用 默认构造函数
,因为 C++ 的汇编生成由各自 编译器 来决定,如果 编译器
觉得没必要调用 构造函数
那它就会把这一步省掉来加速性能,那什么时候不会调呢? 参考如下代码。
class Person {public:void show() {printf("show!"