C++:引用、const

一、const

        我们都知道const 修饰符修饰一个变量,使用const修饰之后,这个变量相当于常量了,它的值在代码其他部分不能再修改,这对于函数调用时候,防止错误的修改原本不应修改的变量起到很大作用。

在C语言中,const修饰常变量:在编译阶段常变量没有左值,其他和普通变量处理相同。

在C++中,const修饰的是常量:在编译阶段把用到常量的地方替换成常量初始值

使用规则如下:

          ①、一定要初始化

          ②、不能有修改常量内存块的风险

          ③、const修饰的全局符号是一个local属性

注:extern const修饰的全局变量的符号声明成global属性

extern const int gdata=10;//global属性

          ④、用变量来初始化常量,常量退化成常变量

int b=10;
const int a=b;
int arr[a];

            

二、引用  &:

           在学习之前我们所了解的是&为取地址符号,但还有一种用法是&为引用符号,即内存单元的别名,底层以指针方式支持,在引用使用的地方(实现点)系统自带解引用过程。

#include<iostream>
using namespace std;

int main()
{
	int a = 10;
	int& b = a;
	b = 20;
	cout << a << " " << &a << endl;
	cout << b << " " << &b << endl;
}
输出结果为:
a 20
b 20

1.普通引用规则:

                            ①.引用一定要初始化

                            ②.引用 引用的 变量一定要能取地址

                            ③.引用不可改变

                            ④.引用只能访问引用所指向内存块的内容

2. 常引用:

①.const &:引用引用的变量不能取地址时使用,此时常引用可以处理,数值将会放到内存的临时量中,临时量因为在内存中,有地址,常引用引用临时量的内存单元(地址)。


const int& c = 10;//10无地址

②.const和一级指针的结合 

//错误使用
int a = 10;
int*p = &a;	
int* q = p;
//正确使用
const int a = 10;
const int* p = &a;
const int* q = p; 

③.const和二级指针的结合 

//错误
int a = 10;
int* p = &a;
int**q = &p;
//正确
const int a = 10;
const int* p = &a;
const int**q = &p;

④.const和形参结合 :1.防止实参被修改   2.接受临时量

int Mul(const int& a, const int& b)
{
	return a * b;
}

int main()
{
	int a = 10;
	int b = 20;
	Mul(10, 20);
	return 0;
}

⑤.const和返回值结合 :不能返回局部变量地址或引用

//错误
int& getData(int data)
{
	int tmp = data;
	return tmp;//lea,  eax, [tmp]  //&tmp
}

猜你喜欢

转载自blog.csdn.net/wh_0727/article/details/84402245