我遇到了一些看起来像这样的代码:
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);