C++之函数返回引用类型

C++的函数无法返回局部变量的引用,即,要么返回全局变量的引用,要么返回指针指向内容的引用。

1.对于一般函数

1)尽量避免返回引用类型,多使用引用传参

vector<T> func(const vector<T> &);

2)如果实在想返回作用域在函数内的变量的引用,可以利用指针实现(return给外部时相比非引用返回类型减少一次copy,速度较快,但不推荐)。

vector<T> &func(const vector<T> &v)
{
	vector<T> *p;
	vector<T> temp;
	p = &temp; //指针指向局部变量的地址
	//注意:上面三句话的顺序不能变
	//如果想懒省事儿改成:
	//vector<T> temp;
	//vector<T> *p = &temp;
	//c=func(a,b)接收的就是个空的vector<T>了
	//赋值给c的前夕就被C++意外注销了
	//惊不惊喜,意不意外,版本BUG
	*p= vector<T>(...); //核心操作(返回的内容)
	return *p;
}

上面的函数可以正常接收*p,但无法被套用。

vector<T> y = func(x); //正常, y=*temp
vector<T> y = func(func(x)); //异常
//func(x)作为引用传参时会提前清空自身, 实际传进的是非*p的垃圾数据(可自行验证)

2.对于类的函数

1)相比一般函数自由得多,因为类内的变量或者指针相对于类的函数都不是函数内的局部变量,因此建议多使用引用返回类型或者引用传参。

class A{
	int x;
	int *y;
public:
	int &func1(const int &)
	{
		return x;
	}
	int &func2(const int &)
	{
		return *y;
	}
	int &func3(const int &)
	{
		return func2(func1(x));
	}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值