转换构造函数的实际工作方式

How converting constructor actually work

本文关键字:方式 实际工作 构造函数 转换      更新时间:2023-10-16

我发现一个接受单个参数的构造函数被称为转换构造函数(c++03)。但这是否意味着特定的构造函数将隐式创建一个临时对象,并将其分配给所需的对象?(我们看不见?)那么写作有什么区别EgClass m=EgClass(1)和EgClass m=1EgClass(1)是否将int类型转换为EgClass?(如果是,这是怎么发生的?)同样,当我们写EgClass m(1)时会发生什么?

但这是否意味着特定的构造函数将隐式创建一个临时对象,并将其分配给所需的对象?

是的,但只是形式上的-在许多情况下,即使在关闭优化的情况下进行构建,它也会优化这些临时性。这意味着在构造函数中添加的任何日志都不会表明创建了这样的临时性。

那么写EgClass m=EgClass(1)和EgClass m=1的区别是什么?(如果是,这是怎么发生的?)

EgClass m=EgClass(1)EgClass m=1相同,您可以想象,当编译器看到EgClass m=1时,它会将其转换为EgClass m=EgClass(1),然后转换为EgClass m(EgClass(1))

EgClass(1)是否将int类型转换为EgClass?(如果是,这是怎么发生的?)

是的,1转换为EgClass。这是使用临时的——但同样,形式上有一个临时的,但允许编译器对其进行优化。

同样,当我们编写EgClass m(1)时会发生什么

整数1被转换为EgClass类型的对象。没有临时的,即使是正式的。