gpt4 book ai didi

c++ - 引用类型的定义是什么?

转载 作者:太空狗 更新时间:2023-10-29 21:20:20 24 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

{ // 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

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

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...

关于c++ - 引用类型的定义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24827592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com