我遇到了一些看起来像这样的代码:

class Cents
{
private:
    int m_nCents;
public:
    Cents(int nCents) : m_nCents(nCents)
    {
    }
 };

int main(){
    Cents c = 0; // why is this possible?
}


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

最佳答案

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


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


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


由于它是一个右值,因此将调用到移动构造函数/赋值(可能会回退到副本ctor /赋值);但是编译器可能会忽略这一点。如果您明确地编写该代码,则相当于:

Cents c = Cents(0);

10-08 06:52