从int到类类型的隐式转换

Implicit conversion from int to a class type

本文关键字:转换 类型 int      更新时间:2023-10-16

我遇到了一些代码,如下所示:

class Cents
{
private:
    int m_nCents;
public:
    Cents(int nCents) : m_nCents(nCents)
    {
    }
 };
int main(){
    Cents c = 0; // why is this possible?
}

为什么可以从int转换为类Cents的类型?此外,在这种情况下是否调用了复制构造函数?

为什么可以从int转换为类Cents的类型?

这是允许的,因为有时它很方便。但这也可能有问题:这就是为什么你可以通过使类构造函数explicit来禁止这种隐式构造。

此外,在这种情况下是否调用了复制构造函数?

由于它是一个右值,因此调用将是移动构造函数/赋值(可以回退到复制构造函数/赋值);但编译器可能会忽略这一点。如果你写得很明确,它将相当于:

Cents c = Cents(0);