Return class 带有成员变量的对象

Return class object with member variable

为什么即使我没有返回 Base class 函数 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) 应该总是 return 一个 Base class。编译器知道为了创建一个 Base 对象,您不需要任何东西(默认构造函数)或 int,因此它使用带有 int 和 [= 的构造函数创建一个对象27=]就是这样。

如果您愿意,可以明确说明并执行类似以下操作并获得完全相同的行为:

Base test(int n){
    return Base(n);
}

简而言之,n 被隐式转换为 Base 对象,因为您声明了一个只需要 int.

的构造函数