常引用的作用

#include <iostream>
using namespace std;

struct Teacher
{
	char name[64];
	int age;
};
void printTeacher(const Teacher &p)
{
	//p.age =20;//编译不通过 由于正在通过常量对象访问age,因此无法对其进行修改
	//常引用 让实参变量拥有只读属性 防止修改
	printf("age:%d\n",p.age);
};
int main()
{
	Teacher t;
	t.age = 10;

	printTeacher(t);

	system("pause");
	return 0;
}

### 引用的概念与使用 在C++中,引用是指用`const`关键字饰的引用,表示该引用所指向的对象不能被改。引用用于函数参数传递,以防止对实参的误操作,同时也能提高程序的安全性和效率。引用的声明形式为: ```cpp const 类型说明符 &引用名; ``` 例如,在结构体传参时,使用引用可以避免不必要的拷贝,并确保原始数据不被改: ```cpp typedef struct { int num; char name[32]; } STU; void my_arr1(const STU &tmp) { // tmp.num = 2000; // 编译错误:不能引用引用对象 std::cout << "学号:" << tmp.num << ", 姓名:" << tmp.name << std::endl; } ``` 这种方式不仅提高了性能(避免了结构体拷贝),还增强了代码的健壮性[^3]。 --- ### 对象的概念与使用 对象是通过`const`关键字声明的对象,其所有成员变量在初始化后都不能被改。对象只能调用成员函数,因为非成员函数可能会对象的状态。 例如,定义一个类并创建对象: ```cpp class Person { public: Person() : age(0), name(nullptr) {} int GetAge() const { return age; } // 方法 char* GetName() { return name; } // 非方法 private: int age; char* name; }; int main() { const Person p2; p2.GetAge(); // 合法:对象调用方法 // p2.GetName(); // 编译错误:对象不能调用非方法 } ``` 在这个例子中,`p2`是一个对象,它只能调用标记为`const`的成员函数,如`GetAge()`,而不能调用非`const`的`GetName()`方法[^4]。 --- ### 引用对象的区别与联系 - **作用范围不同**:引用主要用于函数参数,限制对传入对象改;而对象则是整个对象不可变,适用于任何需要保持对象状态不变的场景。 - **生命周期影响**:引用可以绑定到临时对象常量上,延长其生命周期;而对象的生命周期与其定义方式有关,但其内容始终不可变。 - **访问权限不同**:引用允许访问对象的公共成员,但不能改它们;对象则完全禁止对其成员的改,除非使用`mutable`关键字饰某些成员变量。 两者都体现了C++中“不可变性”的设计理念,有助于提升程序的安全性和可维护性。 --- ### 使用建议 - **函数参数**:如果函数不需要改传入的对象,应优先使用引用,以避免不必要的拷贝和潜在的副作用。 - **对象设计**:对于不应被改的对象,应声明为对象,并将其只读方法标记为`const`。 - **接口设计**:在类的接口中,合理使用`const`可以明确表达哪些方法不会改变对象状态,便于编译器优化和用户理解。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值