C++引用重点知识
·
C++引用的基本概念
引用是变量的别名,必须在声明时初始化且不能更改绑定对象。语法格式为 数据类型 &引用名 = 变量名。
- 引用必须绑定到有效的存储空间(如变量),不能绑定到字面量或临时对象(除非是
const引用)。 - 引用本身不占用额外内存空间,其操作直接作用于原变量。
引用与指针的区别
- 引用必须在声明时初始化,指针可以延迟初始化。
- 引用绑定后不可更改,指针可以重新指向其他对象。
- 引用没有空值(
nullptr),指针可以为空。 - 引用语法更简洁,无需解引用操作符(
*)。
示例代码:
int a = 10;
int &ref = a; // 引用初始化
int *p = &a; // 指针初始化
ref = 20; // 直接修改a的值
*p = 30; // 通过指针修改a的值
引用作为函数参数
引用常用于函数参数传递,避免拷贝开销并允许修改实参(替代指针的显式解引用)。
void swap(int &x, int &y) {
int temp = x;
x = y;
y = temp;
}
int main() {
int a = 1, b = 2;
swap(a, b); // 直接修改a和b的值
}
常量引用(const引用)
常量引用可以绑定到临时对象或字面量,常用于函数参数以避免不必要的拷贝和保护数据。
void print(const std::string &s) {
std::cout << s; // 避免拷贝且防止修改s
}
int main() {
print("Hello"); // 合法:const引用绑定到临时字符串
}
引用作为返回值
函数可以返回引用,但需确保返回的对象生命周期足够(如全局变量、静态变量或传入的参数)。
int &getMax(int &x, int &y) {
return (x > y) ? x : y;
}
int main() {
int a = 5, b = 10;
getMax(a, b) = 20; // 修改较大的变量(b变为20)
}
右值引用(C++11引入)
右值引用(&&)用于绑定临时对象,支持移动语义和完美转发,提升性能。
void process(int &&x) {
std::cout << "Processing rvalue: " << x;
}
int main() {
process(42); // 合法:绑定到右值
}
注意事项
- 避免返回局部变量的引用(会导致悬垂引用)。
- 引用不能绑定到位域(bit-field)。
- 函数重载时,引用类型需与调用匹配(如
func(int&)和func(const int&)是不同的重载)。
更多推荐


所有评论(0)