- 引用是支持运算符重载语法的基础,也为函数的传入和传出控制提供了便利。
- 拷贝构造函数,是一种特殊的构造函数,需要用引用来实现从现有的相同类型的对象中产生新的对象。编译器使用拷贝构造函数头通过按值传递的方式在函数中传递和返回对象。
C++ 中的指针
- C和C++指针的最终要的区别在于C++是一种类型要求更强的语言。就像
void *
而言,这一点表现更加突出。C不允许随便地把一个类型的指针赋给另一个类型,单允许通过void*
来实现. - C++ 中必须显示的进行类型转换。
C++中的引用
基本概念
- 引用(&)就像能自动地被编译器间接引用的常量型指针。
- 通常用户函数的参数表中和函数的返回值,但是也能独立的使用
- 任何引用必须和储存单元联系,访问引用时就是访问那个储存单元
- 当引用被创建时,它必须被初始化,(指针则可以在任何时候被初始化)
- 一旦一个引用被初始化为指向一个对象,它就不能改变为另一个对象的引用(指针则可以在任何时候指向另一个对象)
- 不可能有NULL的引用。必须确保引用是和一块合法的储存单元关联
函数中的引用
最经常看见引用的地方是在函数的参数和返回值当中
- 当引用被作为函数的参数时,在函数内任何对引用的更改将对函数外的参数产生改变。(可以传递一个指针来做相同的事情,但是引用有更加清晰的语法)
- 如果从函数中返回一个引用,必须像从函数中返回一个指针一样来对待。
- 当函数返回时,无论引用关联的是什么都应该存在,否则不知道指向哪一个内存。(: 不能返回一个临时变量,以为临时变量在函数体结束时已经被销毁)
int& h() {
int q;
//! return q; // Error
static int x;
return x; // Safe, x lives outside this scope
}
常量引用
1.函数的参数是一个常量引用,那么函数将不会改变参数。
指针引用
- C语言中如果想改变指针本身而不是它所指向的内容,函数的声明可能是这样 void f(int **);当传递它时必须取得指针的地址:
int i = 47;
int *ip = &i;
f(&ip);
int* p=0
是一种初始化结构,把指针赋值为空。