引用类型的定义是什么?

klm*_*123 7 c++ reference

你如何以正式和严格的方式定义(解释)什么是 C++ 中的引用类型?

我试着用谷歌搜索,并查看了 Stroustrup 的“C++ 编程语言”,但我在那里没有看到这个概念的定义。

Que*_*tin 10

引用是别名,是对象的替代名称。它本身不是一个对象(因此它不是一个指针,即使它们的某些用途与指针的用途重叠)。

引用对其处理有一定的限制,与其非对象性相关。例如,您无法创建引用数组。它们必须在声明后立即初始化(绑定、就位),因为如果没有对象别名,它们就不可能存在。

但是,您可以存储它们,并且它们遵循自动变量或成员变量的规则。它们的用途之一是探究 C++ 的按值传递函数调用。

请注意,常量引用有一个作为别名的巧妙副作用:当绑定到临时(即未命名)对象时,它们为该对象提供一个名称,因此将其生命周期延长到引用本身的生命周期。

{ // Block scope
     Foo fooVal = makeFoo(); // Say makeFoo() returns a (temporary, unnamed) Foo
     // Here the temporary Foo is dead (fooVal is a copy).

     // Foo &fooRef = makeFoo(); // Error, reference is non-const
     Foo const &fooCRef = makeFoo(); // All good

     // ...

     // The second temporary is still alive
     fooCRef.doSomethingFunny(); // Works like a charm !

} // The second temporary dies with fooRef
Run Code Online (Sandbox Code Playgroud)

但要注意,有可能(尽管是人为的)让一个对象超出范围,而引用仍然指向它。然后,您将拥有不再使用的悬空引用(这样做将是未定义的行为)。

Foo *fooPtr = new Foo; // Here is a Foo
Foo &fooRef = *fooPtr; // Here is an alias for that Foo

delete fooPtr; // Here is the end of that Foo's life

fooRef.doSomethingFunny(); // Here comes trouble...
Run Code Online (Sandbox Code Playgroud)