我忍不住了,但这个基本问题一直在我脑海中浮现:为什么 C++ 有引用,而你也可以使用指针呢?
我知道在某些情况下,它们会稍微安全一些,而且通常它们会使代码更漂亮,但从技术上讲没有区别,对吧?那么在任何情况下我无法使用指针并且必须使用引用吗?
我想看看何时使用引用是不可避免的具体例子。
免责声明:
我在 StackOverflow 上没有找到任何答案,这不是关于语法差异的问题。我想知道为什么 C++ 语言首先引入了引用。
我忍不住了,但这个基本问题一直在我脑海中浮现:为什么 C++ 有引用,而你也可以使用指针呢?
我知道在某些情况下,它们会稍微安全一些,而且通常它们会使代码更漂亮,但从技术上讲没有区别,对吧?那么在任何情况下我无法使用指针并且必须使用引用吗?
我想看看何时使用引用是不可避免的具体例子。
免责声明:
我在 StackOverflow 上没有找到任何答案,这不是关于语法差异的问题。我想知道为什么 C++ 语言首先引入了引用。
pass-by-reference
或return-by-reference
.const
) 引用可以绑定到临时对象。要创建一个临时指针,您需要在传递给它的方法中释放它。但你无法判断它是暂时的还是不在里面。运算符重载。使用“通过引用传递”的指针会给你不可接受的语法。
如果你有一个指针作为参数,你必须检查它是否为 NULL。对于参考文献,您必须进行检查。这就是为什么这个人自己在 C++ 中引用的原因 - http://www.stroustrup.com/bs_faq2.html#pointers-and-references
class A{
public:
A(int i){}
};
void foo(const A& a){};
void foo2(const A* pa){};
int main (void)
{
foo(1);
foo2(1); //invalid
return (0);
}
我知道的一种情况。用户不需要管理引用对象,编译器可以销毁它。由于指针要求用户明确删除它。对于 foo2,很难管理临时生命周期。
例子:
my_type *get_some_data();
...
my_type *data = get_some_data();
允许做delete data
而
my_type &get_some_data();
...
my_type &data = get_some_data();
无法删除。