从int到类类型的隐式转换

时间:2016-04-11 19:15:30

标签: c++ implicit-conversion

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

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

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

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

1 个答案:

答案 0 :(得分:1)

  

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

这是允许的,因为它有时候很方便。但它也可能有问题:这就是为什么你可以通过创建类构造函数<div class="form-group"> <label th:for="ftpConnection">FTP Connection:</label> <select class="form-control" name="ftpId" > <option th:each="ftpConnection : ${ftpList}" th:value="${ftpConnection.getId()}" th:text="${ftpConnection.getDescription()}"> </option> </select> </div> 来禁止这种隐式构造。

  

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

因为它是一个右值,所以调用将是一个移动构造函数/赋值(它可以回退到复制文件/赋值);但编译器可能会省略它。如果您明确地写了它,它将等同于:

explicit