2016-02-17 50 views
0

刚开始做操作符重载,我的老师并没有深入研究,所以我想知道为什么前缀/后缀增量/减量的返回类型不同。当我看到前缀重载时,返回类型被写为Type &,但后缀的返回类型被写为Type。我做了前缀没有&和功能都运行正常。返回类型是否影响任何东西,或者它只是另一种区分前缀和后缀的方法?为什么前缀增量重载返回类型而不是类型?

回答

2

的原因是为了让链接:

++ ++ ++ i; 

为了让i三重增量,++必须返回参考并采取参考。如果它返回一个临时副本,第二个++会增加...临时副本(实际上,临时副本不会绑定&,所以它甚至不会编译)。

+0

那不是UB吗? – Slava

+0

@Slava - 不,用户定义的操作符包含一个函数调用,它为表达式添加适当的序列点。对于int变量,这与* i ++ + ++ i *非常不同。 –

+0

事实上,如果内置的链接前缀UB带来了有趣的问题。在这里问它http://stackoverflow.com/questions/35464793/why-chained-prefix-increment-decrement-for-builtin-type-is-not-ub-for-c – Slava

1

要添加到Emilio的答案后缀增量创建一个临时变量,并将其设置为1加上您希望增加的变量,其中前缀增量增加实际变量,在某些情况下可以提高性能。

0

主要原因是遵循C++中内置类型的语义,其中前缀增量/减量返回左值,后缀1返回右值。详情可查询here

相关问题