一、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
}