当类名后面跟着&符号(如ostream& operator <<(...)),这个&符号是什么意思?

33

我知道指针和&符号代表“地址”,但在这种情况下它代表什么意思?

此外,在重载操作符时,为什么常常用const声明参数?

4个回答

19

如果你要返回一个 ostream 对象的引用,仅仅把 & 理解为“取地址符”并不能总是奏效。这里有一些有关 C++ 引用的信息,可以参考 C++ FAQ Lite

至于 const,C++ 中的类型安全性非常重要,而 const 的正确使用能帮助你增强类型安全性。FAQ 中的另一个页面 可以帮助你理解这方面的内容。在某些情况下,const 可以防止由副作用带来的数据更改,从而保护你的数据。


10
根据上下文,&符号可以有两种不同的含义。回答您具体问题的答案是它是一个引用,而不是"地址"。这两个概念非常不同,理解它们之间的区别非常重要。 C++参考 将参数设置为const的原因是确保它们不会被函数更改。这保证了调用函数的人传递的参数不会被更改。

当您在“普通”变量上使用“与号”时,您正在获取内存中变量的地址-这就是Omar的意思。但是对于引用(references),&具有不同的含义。 - Jesper
Jesper,你说得对。我更新了我的答案以作出区分。 - nathan

4
在C++类型声明中,&符号表示“引用”。在这种情况下,“operator<<”返回一个对“ostream”对象的引用。
实际上它返回的是“*this”,因此它实际上是同一个“ostream”对象,并且意味着您可以链接调用“operator<<”,类似于这样:
os << "Hello" << " " << "World" << endl;

1
大多数程序员遇到的operator<<的实现是自由函数,而不是成员函数,因此没有涉及this - sbi

4
这意味着变量是一个引用。它有点像指针,但又不完全相同。
参见:引用 (C++)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接