C++ 核心特性深度解析
C++ 的演进之路,是不断在性能与安全、灵活与严谨之间寻求平衡的艺术。
本文将深入剖析三大特性:引用、内联函数和 nullptr。理解它们,不仅是掌握语法,更是洞察 C++ 设计哲学,书写更高效、更健壮代码的关键一步。
引用:不仅仅是别名
概念与定义
引用不是重新定义变量,而是给已经定义的变量起一个别名。编译器不会为引用变量开辟内存空间,它与原变量共用同一块内存区域。
形式如下:
类型& 引用别名 = 引用对象;
为了避免引入太多运算符,C++ 复用了 & 符号(取地址符)。区分方法很简单:看上下文,如果是声明则是指向引用的初始化,如果是表达式则是取地址。
引用的核心特性
- 必须初始化:定义时必须绑定到一个对象。
- 不可更改指向:一旦引用了一个实体,就不能再引用其他实体。
- 多引用支持:一个变量可以有多个引用。
来看一段验证代码,观察地址是否一致:
#include <iostream>
using namespace std;
int main() {
int i = 10;
// 引用:j 是 i 的别名
int& j = i;
// 多个引用
int& k = i;
// 给别名取别名
int& a = j;
cout << &i << '\n';
cout << &j << '\n';
cout << &k << '\n';
cout << &a << endl;
return 0;
}
运行结果会显示所有地址相同,这证明了它们共享同一块内存。
如果尝试未初始化就使用引用,或者试图让引用重新绑定到其他变量,都会导致编译错误或逻辑错误。例如,下面的代码中 b = c 实际上是将 c 的值赋给了 b 所绑定的 a,而不是改变 b 的指向。
引用传参与返回值
引用的主要实践用途是通过引用传参和引用返回来减少数据拷贝提高效率,以及在修改引用对象时同步改变被引用的原对象。
1. 引用传参 vs 指针传参
引用传参跟指针传参功能类似,但语法上更方便,不需要解引用操作。
void {
(*a > *b) {
tmp = *a;
*a = *b;
*b = tmp;
}
}
{
(rx > ry) {
tmp = rx;
rx = ry;
ry = tmp;
}
}
{
x = ;
y = ;
(&x, &y);
cout << x << << y << ;
(x, y);
cout << x << << y << ;
;
}


