从我的经验来看,“sentinel”引用的需求确实经常是使用指针而不是引用的原因。我想知道的是:为什么C++没有专门的“NULL值”用于引用?这似乎会使指针几乎变得不必要,从而解决许多问题。如果可以使用引用,则使用引用;如果必须使用指针,则使用指针。
...
上述规则的例外情况是:函数的参数或返回值需要一个“sentinel”引用——一个不引用对象的引用。通常最好通过返回/取一个指针,并将NULL指针赋予特殊意义(引用必须始终别名对象,而不是解除引用的NULL指针)来实现这一点。
那么,为什么它不是语言规范的一部分呢? 编辑:
我不确定我的问题是否清晰——我猜我并非在字面上询问关于NULL引用。大多数情况下,我读到的是在C++中“引用就是对象”。而且,在大多数面向对象编程语言中,对象可以为NULL——如Pascal、C#、Java、JavaScript、PHP等,你可以使用someObject = null
或someObject := nil
。实际上,Pascal也支持指针,但仍允许对象为nil
,因为它有其用途。那么,为什么C++特别之处在于没有NULL对象?这只是一个疏忽还是一个实际的决定?