如果我们有一个名为Distance
的用户定义类型(类),并且有dist1
和dist2
作为该类型的对象,那么我们可以执行:
dist1=dist2;
由于编译器提供了内置的赋值运算符。
但是,与此同时,我们也可以执行以下操作:
dist1= 1.0;
编译器如何完成从float
到Distance
的转换,因为我认为只能有一个隐式赋值副本,该副本具有与参数相同的类。
Distance
具有以下构造函数:
Distance()
Distance(float c)
答案 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
}