一:引用
1.引用的定义:是一个已存在变量的别名,相当于两者共用一块地址。
2.引用的主要特征:1.声明时必须初始化。2.初始化后不能改变引用的对象
3.引用与指针的区别:1.引用必须在定义时初始化,指针可以先声明后赋值。2.引用初始化后不能改变引用的对象,指针可以随时改变指向。3.不存在指向空值的引用但是存在指向空值的指4.sizeof(引用)得到的是所指向对象的大小,sizeof(指针)得到的是指针本身的大小
4.引用在形参以及返回值时的使用:
1.目的是:避免拷贝,提高效率
2.在形参中:
class MyClass
{
private:
int _data;
public:
void setdata(int& data)//相当于传址调用
{
data *= 10;//函数中的任何操作都会改变data的值
cout << data << endl;//输出结果应为_data的十倍
}
};
3.在返回值中:
class MyClass
{
private:
int _data;//生命周期在MyClass中
public:
int& getData()
{
int data;//生命周期只在函数中,不能在此return中使用
return _data;
}
};
注意:生命周期必须在出了函数作用域后仍能使用
二:const
1.const的定义:是C++中用于声明常量的关键字
2.const与对象宏(#define)的区别:1.const 变量有明确的类型,编译器可以进行类型检查。#define 是简单的文本替换,不进行类型检查。2.const 变量在内存中有实际的位置。#define 宏在预处理阶段被替换,不占用内存。3.const 遵循正常的作用域和可见性规则。#define 从定义点到文件结束都有效。4.const 变量可以在调试器中查看和监视。#define 宏在预处理阶段被替换,调试时看不到原始定义。
3.const在返回值,形参,this指针时的使用
1.目的是:禁止修改,防止意外
2.用在返回值时:可以防止返回值被修改。这在返回指针或引用时特别有用
class MyClass
{
private:
int _data;
public:
const int* getdata()
{
return &_data; // 这是一个指向 const int 类型的指针。
//意味着指针所指向的 int 值是常量,不可以被修改。
}
};
3.用在形参时:可以保证函数不会修改传入的参数。
class MyClass
{
private:
int _data;
public:
void printdata(const int& data)
{
//data++; // 不能修改 value
std::cout << data << std::endl; //只能读取
}
};
4.用在this指针时:this 指针实际上变成了指向 const 对象的指针。这意味着在 const 成员函数中,不能修改非 mutable 成员变量。
class MyClass {
public:
void setData1(int value)
{
_data = value;
cout << _data;
}
void setData2(int value)const
{
//_data = value; //这时候this指针被const修饰,不能改变其成员函数的值
cout << _data;
}
private:
int _data;
};
5.const修饰的对象或者函数不能调用非const的对象或者函数
但是非const的对象或者函数能调用const修饰的对象或者函数
三:引用和const的联系:
建议有引用的时候,一起使用const。因为引用的过程中可能涉及产生临时变量、隐式类型或者匿名对象等问题,这时候不加const会出错。所以引用和const尽量一块使用。