相对于C语言,引用是C++新增的概念。引用和指针有点相似,很容易混淆。
引用只是被引用对象的一个别名,不管被引用对象的大小是多少,其只占4字节的空间。
考虑下面代码,A1包含一个int类型的变量和一个B类型的引用,A2包含一个int类型的变量和一个B类型的变量。
class B{
int a[4];
};
class A1{
int i;
B& m_b;
};
class A2{
int i;
B m_b;
};
在4字节对齐时,sizeof(A1)为8,因为i占4字节,引用占4字节。而sizeof(A2)为20,因为i占4字节,m_b占16字节。
在函数参数传递时,将传值的地方改为传引用或指针能提高性能的。考虑下面3个函数:
void f1(B b);
void f2(B& b);
void f3(B* b);
f1 是不推荐的,因为其要将整个B的对象进行传递。而 f2 和 f3 性能很好。
另外,引用在定义时必须赋初值,而指针无此要求。
int i = 5;
int &i_reference = i;
类的成员变量为引用时,必须在初始化列表中赋值。如下:
class A{
public:
A(B& b) : m_b(b){}; // 在初始化列表中赋值
private:
B& m_b;
};