Linux UID和GID详解:从概念到实操,彻底搞懂用户权限体系
2026/10/1 5:39:30
Person&PersonAddAge(Person &p) {this->age+=p.age; //this指回p2的指针,而*this指回的就是p2这个对象本体 return*this;}返回引用:不创建新对象,直接操作原对象
返回值:会创建临时副本(拷贝构造),效率低
// 如果不返回引用,而是返回值: Person PersonAddAge(Person &p) { this->age += p.age; return *this; // 返回的是副本! } p2.PersonAddAge(p1).PersonAddAge(p3); // 第二次调用是在临时对象上,不是原来的p2!void版本的函数void PersonAddAge(Person &p) { this->age += p.age; // 只能执行一次操作,不能连续调用 }使用方式:
p2.PersonAddAge(p1); // 执行完就结束了 p2.PersonAddAge(p3); // 需要再写一行Person&版本的函数Person& PersonAddAge(Person &p) { this->age += p.age; return *this; // 返回对象本身的引用 }p2.PersonAddAge(p1).PersonAddAge(p3).PersonAddAge(p4); // 可以连续调用,从左到右执行| 返回类型 | 特点 | 能否链式调用 |
|---|---|---|
void | 只执行操作 | ❌ 不能 |
Person | 返回副本 | ⚠️ 可以但操作的是副本 |
Person& | 返回自身引用 | ✅ 可以且操作原对象 |
关键点:
返回引用是为了操作原对象,不是创建新对象
链式编程让代码更简洁、可读
*this返回的是当前对象的引用
这是面向对象编程中常见的设计模式