C++函数返回值是自定义类型情况

C++中,函数的返回值是自定义类型的情况主要分为两种,一种是非引用类型的自定义类;另一种是引用类型的自定义类。

1 返回值是自定义类的非引用类型

在这种情况下,使用该类拷贝构造函数,根据返回值来创建该类的新的对象。

class Person {

Person(int age) {//构造函数

cout << "param constructor!" << endl;

mAge = age;

}

public:

Person(const Person& person) { //拷贝构造函数

mAge = person.mAge;

}

public:

int mAge;

};

Person MyFunc() {//返回值为非引用自定义类的函数

Person q(10);

return q;

}

此时,使用如下代码调用MyFunc()函数

Person p = MyFunc();

MyFunc()函数返回了Person类的变量q之后,会调用Person的拷贝构造函数,将q的值拷贝给p需要注意的是,以上代码并没有调用Person类的赋值表达式。即使不处理MyFunc()函数的返回值,直接调用MyFunc()函数

MyFunc();

此时依然会调用Person的拷贝构造函数,只是此时使用Person的拷贝构造函数将q的值拷贝给一个临时变量。

2 返回值是自定义类的引用类型

当函数的返回值是自定义类的引用类型时

Person& MyFunc() {//返回值为引用自定义类的函数

Person q(10);

return q;

}

如果不对MyFunc()函数的返回值进行处理,

MyFunc();

此时,不会调用Person类的拷贝构造函数。而将对MyFunc()函数的返回值赋值给其它对象,

Person p = MyBusiness();

此时依然会调用Person类的拷贝构造函数。

猜你喜欢

转载自blog.csdn.net/hou09tian/article/details/80743614