C++ 在从类类型到类类型的类型转换过程中如何调用复制构造函数

C++ 在从类类型到类类型的类型转换过程中如何调用复制构造函数,c++,C++,假设我必须进行类型转换(从一个类的对象到另一个类的对象) 然后我知道这可以通过两种方式实现 1-通过在目标端创建构造函数 2-使用转换函数(运算符) 所以,我想知道构造函数是如何被称为构造函数的,只有当一个对象被创建时才会被调用,在我们的情况下,没有对象的创建,因为我的对象已经被创建了 例: 假设有两个类test和base, 然后 我正在将链接附加到我的程序代码。。 如果该语句调用构造函数,那么它也将调用析构函数。您显示的主要操作是operator=,其中ob1被分配某物 某个东西可能是一个类型

假设我必须进行类型转换(从一个类的对象到另一个类的对象) 然后我知道这可以通过两种方式实现

1-通过在目标端创建构造函数
2-使用转换函数(运算符)

所以,我想知道构造函数是如何被称为构造函数的,只有当一个对象被创建时才会被调用,在我们的情况下,没有对象的创建,因为我的对象已经被创建了

例: 假设有两个类test和base, 然后

我正在将链接附加到我的程序代码。。
如果该语句调用构造函数,那么它也将调用析构函数。您显示的主要操作是
operator=
,其中
ob1
被分配某物

某个东西可能是一个类型为
test
的临时对象,它可以通过您描述的两种方式之一创建,在这种情况下,在
操作符=
之后调用析构函数。但是您描述的转换可能性可能会返回一个
测试&
测试常量&
,而
运算符=
可能会接受该值,因此不需要构造函数或析构函数


您可能还错误地认为需要进行任何转换。这可能是因为
test::operator=
有一个重载,可以直接获取所提供的
基&
,而无需首先进行转换。

您看到的是隐式转换构造。编译器正在调用类
con
的复制构造函数,该构造函数将类型为
test
的对象作为参数

编译器找不到兼容的赋值运算符,因此它会查看是否可以以其他方式转换
ob1
对象

它发现
con
类有一个兼容的复制构造函数,因此它隐式调用它以允许赋值发生

见参考资料:

隐式声明和用户定义的非显式复制构造函数 和移动构造函数是转换构造函数


通过在
con
中的复制构造函数声明之前使用关键字
explicit
,可以避免这种行为。这将防止编译器隐式地调用它。

如果您发布一个可编译的示例来重现您的问题,那将更好。上面你所说的代码不是有效的C++。现在我已经附上了我的程序…这是C++的“魔力”,如果你喜欢并接受这种魔法,你可能会喜欢这种语言,如果你让复杂的语义困扰你(就像我那样),那么它可能是你喜欢的语言比别人少的…我个人认为C++不应该被教进CS类,因为有这么多不必要的复杂性…@ USER 5084928:没问题——如果你对解释满意,请把标记看作是接受的!你的短语“ob1的构造函数”是完全错误的。在引用的代码中,ob1在任何意义上都不是构造的,不是“转换”构造函数,也不是任何其他类型的构造函数<代码>ob1正在分配给且仅此。其他所有事情都发生在作业的右侧。@JSF:你完全正确,我将前面的两个答案融合在一起,在融合过程中失去了意义。我现在已经更新了答案。抱歉。@user5084928:我相信你需要点击答案旁边的大勾号。
void main
     test ob1
     base ob2
(ob1=ob2)   how this statement calls constructor?