为什么函数test((即使我没有返回基类也能工作?编译会发生什么?有人能给我解释一下吗?
#include <iostream>
class Base {
public:
Base(){}
Base(int val): _val(val){};
~Base(){};
Base test(int n){
return (n);
}
int &operator *() { return (_val); };
private:
int _val;
};
int main()
{
Base base;
Base a;
a = base.test(42);
std::cout << *a << std::endl;
return (0);
}
您声明了一个接受int
的构造函数,并声明test(int n)
应始终返回一个Base
类。编译器知道,为了创建Base
对象,您不需要任何东西(默认构造函数(或int
,因此它使用接受int
并返回的构造函数来创建对象。
如果你想的话,你可以明确地说,做下面这样的事情,得到完全相同的行为:
Base test(int n){
return Base(n);
}
简而言之,n
隐式转换为Base
对象,因为您声明了一个只需要int
的构造函数。