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
.
的构造函数
为什么即使我没有返回 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
.