C ++隐式转换如何发生?

时间:2018-11-09 01:42:36

标签: c++ casting implicit-conversion

为此问题提前致歉。自从我使用C ++以来已经有一段时间了,我似乎找不到能回答我问题的确切教程。我认为是一个隐式转换的示例,但我不确定。

代码:

class Square
{
public:        
    Square(int size) : size{size}
    {
    }

    int getSize() const
    {
        return size;   
    }

private:
    int size;
};

void doSomething(Square square)
{
    cout << "doSomething called with " << square.getSize() << endl;   
}

int main()
{
    // Should be passing in a Square type here, but instead passing an int.
    doSomething(23);
    return 0;
}

输出:

doSomething called with 23

问题:

  1. 这是隐式转换的示例吗?
  2. 这是怎么发生的?我会满意一个更详细地解释这一点的链接。对于它的价值,我已经了解了the cplusplus.com explanation of Type conversions

谢谢!

1 个答案:

答案 0 :(得分:1)

简而言之:因为Square square = 23;是有效的,所以呼叫doSomething(23)与签名doSomething(Square square)匹配;这就是重载解析中候选函数选择的工作方式。

如果还有doSomething的其他重载也与该呼叫相匹配,则将根据每个重载所需的转换来对这些重载进行排名。

代码Square square = 23;有效,因为Square有一个converting constructor