我发现一个带有单个参数的构造函数称为转换构造函数(c ++ 03)。但这是否意味着特定构造函数将隐式创建一个临时对象,并将其分配给所需的对象?(这不是对我们来说可见吗?)那么写作的区别是什么 EgClass m = EgClass(1) 和 EgClass m = 1 EgClass(1)是否对EgClass进行了类型转换?(如果是这样,这是怎么发生的?) 当我们编写EgClass m(1)时会发生什么?
答案 0 :(得分:0)
是的,但只是正式 - 在许多情况下,即使在关闭优化的情况下,它也会优化那些临时性。这意味着在构造函数中添加的任何日志记录都不会表明已创建此类临时文件。但这是否意味着特定的构造函数会隐式创建一个临时对象,并将其分配给所需的对象?
然后写EgClass m = EgClass(1)和EgClass m = 1有什么区别EgClass(1)是否将类型转换为EgClass?(如果是这样,这是怎么发生的?)
EgClass m=EgClass(1)
与EgClass m=1
相同,您可以在编译器看到EgClass m=1
时将其转换为EgClass m=EgClass(1)
然后转换为EgClass m(EgClass(1))
EgClass(1)是否对EgClass进行了类型转换?(如果是这样,这是怎么发生的?)
是的,1被转换为EgClass。这种情况发生在临时 - 但同样,正式有一个临时的,但允许编译器优化它。
当我们编写EgClass m(1)
时会发生什么
整数1转换为EgClass类型的对象。即使是正式的,也不会产生临时性。