从基本类型到用户定义类型的转换

时间:2018-09-25 16:27:18

标签: c++ oop

如果我们有一个名为Distance的用户定义类型(类),并且有dist1dist2作为该类型的对象,那么我们可以执行:

dist1=dist2;

由于编译器提供了内置的赋值运算符。

但是,与此同时,我们也可以执行以下操作:

dist1= 1.0;

编译器如何完成从floatDistance的转换,因为我认为只能有一个隐式赋值副本,该副本具有与参数相同的类。

Distance具有以下构造函数:

Distance()
Distance(float c)

1 个答案:

答案 0 :(得分:3)

您看到的是对距离类型使用了Converting Constructor

基本上,如果您为以下类型声明了T类型的构造函数:

  • 采用类型为S(或对S的引用)的一个参数
  • 未声明为explicit

然后允许编译器通过调用该构造函数将S自动转换为T。因此,如果您的函数使用了T:

void do_the_thing(T const& t);

然后,这两个调用将是等效的(假设也没有do_the_thing的重载,该重载以S作为参数):

T t;
S s;

do_the_thing(t);
do_the_thing(T(s));

因此您的第二行大致等于以下内容:

{
    Distance temp(1.0);   
    dist1 = temp;
    // temp goes out of scope and is destroyed
}