C++:当你有指针时,为什么还需要引用?

22 浏览
0 Comments

C++:当你有指针时,为什么还需要引用?

为什么C++引入了引用而不是仅使用指针呢?我知道在某些情况下,引用稍微更安全,而且通常可以使代码更简洁,但从技术上讲,它们没有区别,对吗?那么有没有任何情况下必须使用引用而不能只用指针呢?我想看到一些使用引用是不可避免的具体示例。\n免责声明:我在StackOverflow上没有找到任何关于这个问题的答案,这不是关于语法差异的问题。我想知道为什么C++语言首先引入了引用。

0
0 Comments

C++中为什么需要引用而不是指针?这个问题的出现源于对指针作为参数时需要检查是否为NULL的要求,而使用引用则不需要进行这样的检查。C++之父Bjarne Stroustrup在他的网站上解释了为什么C++中引入了引用的原因。然而,原始链接已经失效,幸好有人指出了这个问题并得到了修复。该引用给出了引入引用的主要原因,这是唯一一个试图引用来源的人,但奇怪的是你甚至没有试图总结那个引用,而是选择谈论其他事情。回答中提到了真正的原因,但却没有引用它。

0
0 Comments

在C++中,为什么在拥有指针的情况下还需要引用呢?这个问题的出现是因为运算符重载。使用指针进行“通过引用传递”会导致不可接受的语法。这也是C++最初引入引用的原因之一。或许,如果没有引用,编译器本身会传递一个指向常量的指针而不是引用。不考虑类型安全性,我认为引用只是“语法糖”。但是,如果使用指针进行重载,你将无法通过值传递或返回值。引用是通过引用进行传递的。它们使语法更清晰,但生成的代码与普通指针的代码并没有太大区别。正如Stroustrup在链接中指出的那样,使用指针进行运算符重载是丑陋的。虽然不是不可能,但是实际上是不可能的,因为你不能取一个右值的地址。如果使用指针进行重载,&x + &y是可能的,但是你如何编写x + y + z呢?当然,如果没有引用,编译器必须对此提供一些支持。就像对引用一样。尽管我们可以从更积极的回答者那里推断出这是主要原因,但是没有引用,这只是一条评论,肯定不是一个答案。但是嘿,口味不可争议!那么为什么编译器不让你直接编写:Foo operator +(const Foo* x, const Foo* y)并通过“Foo a, b; a + b”来使用它(即隐式地添加“&”)呢?你可以放弃语言中的许多规则和语法,仍然能够拥有同样的功能。而且整个语言中的隐式性会少得多。

0
0 Comments

C++中为什么在拥有指针的情况下还需要引用?这个问题的出现的原因是:

1. 仅使用指针无法正确地进行按引用传递或按引用返回。

2. 有些方法需要引用。如果没有引用,如何实现复制构造函数?

3. 有时需要强制别名。使用指针无法实现这一点,因为指针可以被更改。而引用在初始化时将绑定到同一个对象,通过其作用域保证其引用的对象不会改变。

4. 安全性问题。

5. (const)引用可以绑定到临时对象。要创建一个临时指针,你需要在传递给它的方法中释放它。但是你无法在内部判断它是临时的还是非临时的。

解决这个问题的方法是使用引用。

引用的优点是可以更容易地进行按引用传递和返回。引用还可以强制别名,并且不允许在初始化后更改指向的对象。与指针不同,引用可以绑定到临时对象。此外,使用引用还可以提高代码的可读性和可维护性。

引用可以看作是指针的一种语法糖。引用在某些情况下可以提供更简洁的代码,并且更安全,因为引用不允许指向不同的对象。如果没有引用,编译器可能会自动将指针传递给const,但不考虑类型安全性。

尽管在C++中已经有指针,但引用的存在是为了解决指针无法完全满足的需求,特别是在按引用传递和返回值时。引用提供了更方便、更安全的方式来处理这些情况。

0