为什么要使用第一个`&`?

时间:2014-07-05 14:19:25

标签: c++ reference

我正在阅读" Bjarne Stroustrup的C ++编程语言"并遇到了这段代码:


1.  Traffic_light& operator++(Traffic_light &t){
2.      switch(t){
3.      case Traffic_light::green: return t = Traffic_light::yellow;
4.      case Traffic_light::yellow: return t = Traffic_light::red;
5.      case Traffic_light::red : return t = Traffic_light::green;
6.      }
7.  }

在第1行,第一部分是Traffic_Light&,表示将返回对enum class Traffic_light的引用。

好的更具体: 我意识到变量前面使用的&意味着""地址在这种情况下,它表示对对象的引用。我理解为什么在函数的参数部分中使用引用 - 这会停止正在进行的对象的本地副本,并且对传递的参数进行任何更改。令我困惑的是为什么需要返回对Traffic_light的引用而不仅仅是对象?

1 个答案:

答案 0 :(得分:4)

增量运算符对给定对象进行操作,并且应该返回对该对象的引用,而不是它的副本。如果缺少第一个&,将为返回值创建一个副本,就像参数一样。作为一个例子,Traffic_light t = raffic_light::green; ++(++t);应该将原始t增加两次,如果返回一个副本就不会这样(我认为它不会编译,因为内部增量返回的临时值不是左值)。