IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Reference or Pointer?

    shonenada发表于 2013-08-27 22:09:00
    love 0

    引用还是指针

    在C++中,变量有着两种存在形式:引用与指针。

    引用与指针在使用方式上完全不同,但它们的功能都是一样的。都是用来间接引用其他对象。

    为了更清晰在什么场合下更适合使用引用或是指针,以下做一个整理:

    首先,引用不同于指针,不能指向空引用。这也就是说,引用必须指向某个对象。由这一点,我们可以知道,当所指向的对象可能有空引用的情况出现时,就必须使用指针,而当对象永远都不可能称为空引用时,才可以使用引用。

    其次,引用在定义的时候必须对其初始化,而指针没有这样的限制。所以当存在有不同初始化可能的时候应用使用指针,而不能使用引用。但这点也意味着引用的代码效率要比指针高,因为使用指针之前,必须对指针进行合法性验证,否则会出现对空指针进行操作的错误。

    另外,引用所指向的对象一旦初始化之后就不能再改变指向的对象,而指针也没有这样的一个限制。因此以下的代码中引用与指针所做的事情是有本质上的不同

    string s1("Nancy");
    string s2("Clancy");
    string& rs = s1;
    string * ps = &s1;
    rs = s2;
    ps = &s2;
    

    需要注意的是,rs = s2 与 ps = &s2; 这两条语句看似一样,但是所执行的操作却根本不同。rs = s2,rs 在初始化时指向 s1 变量,由于引用不能改变指向的对象,那么 rs = s1 实际上是将 s2 的值赋给 rs ,也就是将 r2 的值赋值给 r1 ,r1 成了 Clancy。

    最后一种情况是出现在操作符重载的时候。例如重载操作符`[]`。出于语义易懂的目的,操作符返回引用更符合正常逻辑。

    小结一下,在以下情况下,应该使用指针:

    1. 有可能指向空引用的情况。
    2. 需要延迟初始化。
    3. 需要改变所指向的对象。

    特别指出,操作符重载应该返回引用。



沪ICP备19023445号-2号
友情链接