c++小知识

引用&

引用必须初始化
引用==取别名
引用我们可以理解为是指针常量(指向不可改)

int main()
{
    int a=0;
    int& b=a;
    int c=2;
    //b=c;
    //我们的目的是修改b的指向,但是我们现在这样写的意思是将c的值赋值给b(因为b是a的别名,也就是赋值给a)
    //所以我们无法修改b的指向

    return 0;
}

特别忌讳提醒:引用不能做返回值
这个需要通过栈帧来理解

栈帧中,创建函数会开辟空间,结束会销毁栈帧,但是这片空间有没有被再度初始化就不知道了
但是我们一旦在调用一个函数,就可能会直接覆盖掉这个空间,导致这片空间的值改变
引用的最佳用法是引用做形参,可以提高时间效率,可以降低指针使用带来的难度
c++小知识_第1张图片
返回的是引用,接受的变量也是引用,也就是说———始终指向的都是那片空间,可是当第一次调用之后,这片空间的数字是存在的,但是当调用了Add(3,4)的时候,这片空间里的数就被重置了,所以这个值最后会发生改变

c++小知识_第2张图片
因为使用的是临时变量进行接收,那么就相当于赋值,就是将那片空间中的数字赋值给现在的临时变量,这个临时变量不会改变,那么这个值就不会改变

c++小知识_第3张图片

&的权限
权限缩小

int main()
{
	int a = 0;
	int& b = a;
	const int& c = a;//权限缩小
	//本来b是可以修改大小的
	//但是加了const就不能修改大小了,这样就形成了权限缩小
	
	return 0;
}

权限不能放大

int main()
{
	const int& a = 0;
	//权限放大是错的
	//int& b = a;//权限放大
	//本来是不能改变大小,如果你将他变成了可以改变大小的那就是错的
	
	return 0;
}

特别注意
c++小知识_第4张图片

为什么会报错,因为double类型无法接收int类型
为什么不报错,因为类型转换会有一个临时变量,临时变量有常性,所以需要加上const

int a=0;
size_t b=0;
if(a>b) 
{
	//int类型和size_t比较的时候,他们的原来的值不会发生改变,是生成的中间变量进行比较	
}

底层探究

语法上,引用只是另一个变量的别名,那么他的大小就是原来变量的大小
底层上,引用的实现是一个指针(指针常量)
c++小知识_第5张图片
如果计算的是指针的大小的话应该是4,但是这里是1,证明就是别名

你可能感兴趣的:(c++,java,开发语言)