何时可以安全,方便地将引用变量用作别名?

时间:2015-10-08 06:51:00

标签: c++ c++11 reference

我读过一些answers in SOtutorials in other places通常会提出以下想法:

  

参考变量可以用作第二个名称或另一个变量的别名

这确实是真的,还是有可能无法或不方便的情况?什么时候可行,如何做到这一点?

我的问题的动机:

我在一个类的变量中遵循这个概念,并且每当objects of those classes were copied (复制对象内的引用将引用原始变量)时就会出现问题。到目前为止我看到的解决方案涉及指定一个自定义复制构造函数来更改默认情况下这些别名的初始化,这可能是you can't extend the default constructor更改这些特定变量后的大量工作,然后您需要编写一个用于整个类或用于包装别名的嵌套文件(因此也限制了您可以使用的名称)。

据我所知,底线使用引用成员变量作为别名是不安全的(如果你的变量被复制,它将不会按预期工作)或者不容易(你可能需要编写和维护很多码)。

话虽如此,我的问题可以分为:

  1. 可以将成员引用变量用作别名,而不会遇到前面提到的所有问题吗?
  2. 还有其他可能不安全的情况吗? (除了复制操作)
  3. 如果您没有会员参考变量,您是否可以安全地将它们用作第二个名称,还是应该特别小心?

1 个答案:

答案 0 :(得分:2)

在以下情况下参考是安全的:

  1. 在引用超出范围之前,引用的内容无法消失。
  2. 就是这样。

    这方面的例子是:

    一个。函数的参数,不会将引用存储在任何地方。

    B中。将容器中的深层嵌套或计算元素别名化以使代码更清晰。

    ℃。在具有临时生命周期的仿函数内(例如自定义打印机对象)

    几乎在任何其他时间你应该使用副本或共享指针。