栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++学习 4 | 参数传递与返回值 | const的用法 | 引用的用法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++学习 4 | 参数传递与返回值 | const的用法 | 引用的用法

  • 修饰函数的const
  • 修饰变量的const(参数传递)
  • 返回引用


修饰函数的const

类里面的函数分为要 改变数据 和 不改变数据 两种,不会改变数据的函数,在加上 const。

class complex
{
public:
	complex(double r=0, double i=0):re(r), im(i) {}	
	double real() const {return re;}
	double imag() const {return im;}	
private:
	double re, im;
}

如果没有加const,在创建对象时可能会出现问题!!!

正常情况:

{
	complex c1(2, 1);
	cout << c1.real();
	cout << c1.imag();
}

有问题的情况:
在创建对象的时候加了 const,则创建的这个对象是常量,函数创建者认为不能修改这个对象内的数据。此时如果在函数定义时没有加const,函数则告诉使用者“函数内部可能修改数据”,则发生了矛盾,编译器则不会通过。

{
	const complex c1(2, 1);
	cout << c1.real();
	cout << c1.imag();
}

修饰变量的const(参数传递)

pass by value vs. pass by reference (to const)

pass by value:传递数据时,数据有多大就传多大,若某个数据有300个字节,则传递时就传300个字节。

因此,在C语言中,可以通过指针的方式,将参数的地址传递过去,指针只有4个字节,传递很快。

pass by reference:(引用)引用底层就是指针,传引用的速度相当于传指针的速度。

养成良好的习惯,传参数时尽量都传引用,不要传值!!!

class complex
{
public:
	complex(double r=0, double i=0): re(r), im(i){}	
	//由于传递的是引用,那么在传过去之后可能会被修改,若不想被修改,则加一个const
	complex& operator += (const complex&);	//return by reference
	double real() const {return re;}	//return by value
	double imag() const {return im;}	//return by value
private:
	double re, im;
	friend complex& _doapl(complex*, const complex&);
}
{
	complex c1(2, 1);
	complex c2;
	c2 += c1;	//在执行+=操作的时候,由于传递引用,速度很快
	cout << c2;
}

返回引用

return by value vs. return by reference (to const)
return by reference 的好处:传递者无需知道接收者是以reference形式接收。

返回值的传递也尽量用引用!!!(尽量的意思是,有的情况不能用引用)

可以返回引用的情况:
a 的值和 b的值相加后,结果存放在 a 里面,a 的空间是已存在的,因此可以 return by reference。

不可以返回引用的情况:
因为 a 和 b 相加后的结果不能放在 a 中,也不能放在 b 中,因此需要在函数内开辟一个空间 c 来保存结果,此时返回的就是 c 的值。因为在函数结束时,c 的空间就会被释放,因此不能 return by reference。

//可以返回引用的情况:
int& add(int* a, const int& b)
{
	a += b;
	return *a;
}

//不可以返回引用的情况:
int add(const int& a, const int& b)
{
	int c;
	c = a + b;
	return c;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352814.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号