我正在阅读" 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
的引用而不仅仅是对象?
答案 0 :(得分:4)
增量运算符对给定对象进行操作,并且应该返回对该对象的引用,而不是它的副本。如果缺少第一个&
,将为返回值创建一个副本,就像参数一样。作为一个例子,Traffic_light t = raffic_light::green; ++(++t);
应该将原始t增加两次,如果返回一个副本就不会这样(我认为它不会编译,因为内部增量返回的临时值不是左值)。