指针和引用的区别(1) 表象区别

指针和引用有许多相似之处, 说白了, 引用就是一种尝试, 尝试让指针包装起来, 对外表现就像一个value

首先需要指出的是, C语言是没有引用的, 因为C语言不是面向对象的语言, 引用本质上是面向对象的角度看待指针, 是指针的包装

另外, 考虑如下代码

1
2
A* ptr_a;
A* ptr_a2 = nullptr;

二者都是合法的

但是引用并没有所谓的空引用, 也不能在声明时不进行初始化:

1
2
3
4
5
char* pc = nullptr;
char& pc = *pc;//编译通过, 但是UB

char& pc = nullptr;//编译不通过
char& pc;//编译不通过

也就是说, 如果你采用了引用, 那么就不需要考虑空指针的可能性, 也不需要进行类似的assert测试

最后一个要点是, 引用类型只能绑定一次, 不能二次绑定

也就是说, 首先需要声明引用类型 并且声明时就必须初始化, 初始化意味着要把引用绑定到一个变量上面, 一旦绑定完成, 任何对引用的操作, 都不会修改绑定, 而是修改subobject 也就是引用之下的那个实体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

#include<string>
#include<iostream>
using namespace std;

int main()
{
string s1("A");
string s2("b");

string& S = s1;

S = s2;

cout << s1 << " " << s2;
}

///输出:
//b b

也就是说, 一旦声明完成, 引用包装就会构造完毕, 其本身不再可达, 其符号变成了完美的subobject 之alias

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2019-2024 kier Val
  • Visitors: | Views: