如果我理解正确,引用的动机是使“通过引用”工作变得更容易和更清洁,而不必费心使用指针解除引用。但它们本质上是恒定的,它们只能指向单个对象,即使有效地引用是指针并且在技术上可以重新分配。如果引用可以为null,例如,这也是有益的。在使用之前检查返回的引用是否有效,但这不是一个功能。
忽略这些功能并呈现功能背后的特殊动机是什么?
答案 0 :(得分:5)
动机分为两部分:
1)引用在概念上是对象的别名,因此它的行为(尽可能多且有用)就像变量名一样。只要它在范围内,它就引用同一个对象,它总是引用一个对象。所以,不能重新坐下而不是空。
2)为了将参数传递给重载运算符,发明了引用。没有特别需要重新定位这些参数,并且它们当然必须始终引用一个对象,因为运算符总是有操作数(或者只有一个操作数用于一元运算符)。适合需要的功能是操作数的别名,这就是为什么引用被设想为别名。
以这种方式构思,他们有其他用途。这些用途中的任何一个都不会从它们可重新占位或无效中受益,以便将概念从对象名称改变。最接近的可能是它们在类中用作非静态数据成员。在这种情况下,它们会干扰诸如复制分配之类的事情,但是再次不清楚参考数据成员在复制分配时应该“应该”如何表现,因此没有明确的方法来处理它。指针将处理引用不能的情况。
答案 1 :(得分:3)
这就是动机:专注于通过其他方式无法完成的事情。
答案 2 :(得分:0)
不可空的引用是一件好事,它可以让你对函数的输入做出更有力的保证,等等。它允许您传递对象而无需进行空指针测试。
如果你想要一个可变引用,可以使用指针或std::reference_wrapper
。如果您想要一个可选的返回值,那么您可以使用boost::optional
。
答案 3 :(得分:0)
我会说有关于引用可以做什么的限制,因为它允许:
所以指针是指知道你想要用它们做些棘手的事情。参考文献的典型案例是“我只是想把一块数据交给你”,而不必担心做得对。