考虑C++引用的好方法是什么?

Vic*_*cky 7 c++ reference

我已经编程C,主要是在嵌入式环境中,多年来一直有一个非常好的指针心理模型 - 我不必明确考虑如何使用它们,我对指针算法100%舒适,数组指针,指针指针等.

我写了很少的C++,并且没有很好的思考引用的方法.我过去曾被告知"将它们视为不能为空的指针",但这个问题表明这远不是完整的故事.

因此,对于更有经验的C++程序员 - 您如何看待参考?你认为它们是一种特殊的指针,还是完全属于自己的东西?对于C程序员来说,理解这个概念的好方法是什么?

Art*_*ger 12

我已经习惯将引用视为主对象的别名.

编辑(由于评论中的要求):

我曾经认为引用是一种混叠,因为它的行为方式与原始变量完全相同,而不需要进行额外的操作以影响引用的变量.


Bin*_*ier 8

对我来说,当我在代码中看到指针(作为函数中的局部变量或类中的成员)时,我必须考虑

  1. 指针是否为null,或者是否有效
  2. 谁创造了它所指向的对象(是我吗?,我已经完成了吗?)
  3. 谁负责删除该对象
  4. 它总是指向同一个对象

如果它是一个引用,我不必考虑任何这些东西,这是别人的问题(即将引用视为指针的SEP字段)

PS是的,它可能仍然是我的问题,现在不是


Kim*_*man 6

我不太喜欢"永远有效"的观点,因为引用可能变得无效,例如

int* p = new int(100);
int& ref = *p;

delete p; // oops - ref now references garbage
Run Code Online (Sandbox Code Playgroud)

所以,我认为引用是不可重新绑定的(也就是说,一旦它被初始化,你就不能改变引用的目标)带有语法糖的指针,以帮助我摆脱" - >"指针语法.

  • 对此的常见答案是,它需要调用未定义的行为来使引用无效,而指针可以无效.但是,我明白你的观点.在实践中,这几乎没有什么区别. (3认同)

Mar*_*sto 5

一般来说,你只是不考虑参考.除非您特别需要按值或指针魔术调用,否则在每个函数中都使用引用.

引用本质上是一直指向同一事物的指针.引用不需要解除引用,而是可以作为普通变量访问.这就是它的全部内容.当您需要执行指针算法或更改指针指向的内容时,可以使用指针,以及几乎所有其他内容的引用.