为此问题提前致歉。自从我使用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
谢谢!
答案 0 :(得分:1)
简而言之:因为Square square = 23;
是有效的,所以呼叫doSomething(23)
与签名doSomething(Square square)
匹配;这就是重载解析中候选函数选择的工作方式。
如果还有doSomething
的其他重载也与该呼叫相匹配,则将根据每个重载所需的转换来对这些重载进行排名。
代码Square square = 23;
有效,因为Square
有一个converting constructor。