TOP_LK 发表于 2019-5-2 10:48:37

C++构造函数


[*]如果类成员是const、引用,或者属于某种未提供默认构造函数的类类型,则必须通过构造函数初始值列表为这些成员提供初值。

[*]类成员的初始化顺序与它们在类定义中的出现顺序一致。

[*]如果一个构造函数为所有参数都提供了默认实参,则它实际上也定义了默认构造函数。

[*]使用explict关键字声明的构造函数只能直接初始化。

Croper 发表于 2019-5-2 14:35:44

explicit是强制显式调用啊,直接初始化是什么鬼?

TOP_LK 发表于 2019-5-2 15:16:30

Croper 发表于 2019-5-2 14:35
explicit是强制显式调用啊,直接初始化是什么鬼?

就是要用(),不用=

Croper 发表于 2019-5-2 16:19:09

本帖最后由 Croper 于 2019-5-2 16:21 编辑

TOP_LK 发表于 2019-5-2 15:16
就是要用(),不用=

我个人认为这个不是关键,关键是explicit能防止意外的隐式转换以及调用函数时的二义性,
因为加了explicit也能使用=构造
class TestClass{
public:
      TestClass(int){};
      explicit TestClass(double){};
};

int main(){
      TestClass A=5;
      TestClass B=TestClass(5.0);
}

也许第二个看起来像是首先显式调用构造函数然后再调用复制构造函数,只是编译器将这个过程优化了;
但是这样理解的话第一个也能做相同的理解,只是显式调用构造函数变成了隐式调用构造函数。

TOP_LK 发表于 2019-5-3 13:53:18

Croper 发表于 2019-5-2 16:19
我个人认为这个不是关键,关键是explicit能防止意外的隐式转换以及调用函数时的二义性,
因为加了expl ...

不能直接等于5
页: [1]
查看完整版本: C++构造函数