目录
前言:C++还提供了常引用(const reference)的概念,它是一种特殊类型的引用,用于指向常量对象。本文将详细介绍常引用的概念、用法以及在代码中的应用。
2、常量引用注意:字面量不能赋给引用,但可以赋给const引用,const修饰的引用不可以修改。
3、总结:[const引用使用场景] 常量引用主要用在函数的形参,尤其是类的拷贝和复制构造函数。将函数的形参定义为常量引用的好处:引用不产生新的变量,减少形参与实参传递时的开销。
前言:C++还提供了常引用(const reference)的概念,它是一种特殊类型的引用,用于指向常量对象。本文将详细介绍常引用的概念、用法以及在代码中的应用。
1、常引用定义格式:
const Type& ref = val;
下面看一段代码:
typedef struct {
int num;
char name[32];
}stu;
void printLucy(stu &tmp) {
cout << "学号改变前:" << tmp.num << ",姓名:" << tmp.name << endl;
tmp.num = 2000;
cout << "学号学号改变后:" << tmp.num << ",姓名:" << tmp.name << endl;
}
void test() {
//需求:定义一个函数,遍历结构体中成员(只进行读操作)
stu Lucy = {100,"张三" };
printLucy(Lucy);
}
int main() {
test();
}
运行结果:
在上述代码中,明显不符合要求,要求是在函数中进行只读操作,而上面代码的确使用引用对结构体进行了遍历输出,但此时却存在一个问题,就是可以修改结构体的值,这和要求明显不符,为了解决这一问题,下面我们通过常引用的方式来遍历。
常引用示例:
typedef struct {
int num;
char name[32];
}stu;
void printLucy(const stu &tmp) {
cout << "学号改变前:" << tmp.num << ",姓名:" << tmp.name << endl;
tmp.num = 2000;//err 不可以赋值
cout << "学号学号改变后:" << tmp.num << ",姓名:" << tmp.name << endl;
}
void test() {
//需求:定义一个函数,遍历结构体中成员(只进行读操作)
stu Lucy = {100,"张三" };
printLucy(Lucy);
}
int main() {
test();
}
运行结果:
由此结果可以看出,当给引用前面加上const之后,结构体中的值就不能在函数中被修改,这也符合要求 。
2、常量引用注意:字面量不能赋给引用,但可以赋给const引用,const修饰的引用不可以修改。
示例:
void test() {
int a = 100;
const int& b = a;//此时b就是a
//b = 200; err 不能通过b的值
a = 200;//ok
cout << "a:" << a << endl;
cout << "b:" << b << endl;
}
int main() {
test();
}
运行结果:
3、总结:[const引用使用场景] 常量引用主要用在函数的形参,尤其是类的拷贝和复制构造函数。将函数的形参定义为常量引用的好处:引用不产生新的变量,减少形参与实参传递时的开销。
4、常量的引用
void test() {
//int& a = 10; //err 类型不匹配。 10的类型为const int
const int& a = 10;
cout << "a=" << a << endl;
}
int main() {
test();
}
运行结果:
在对常量引用前,必须加const,否者系统会报错,避免了用别名给常量赋值这一情况。