刚开始做操作符重载,我的老师并没有深入研究,所以我想知道为什么前缀/后缀增量/减量的返回类型不同。当我看到前缀重载时,返回类型被写为Type &,但后缀的返回类型被写为Type。我做了前缀没有&和功能都运行正常。返回类型是否影响任何东西,或者它只是另一种区分前缀和后缀的方法?为什么前缀增量重载返回类型而不是类型?
0
A
回答
2
的原因是为了让链接:
++ ++ ++ i;
为了让i
三重增量,++
必须返回参考并采取参考。如果它返回一个临时副本,第二个++
会增加...临时副本(实际上,临时副本不会绑定&
,所以它甚至不会编译)。
1
要添加到Emilio的答案后缀增量创建一个临时变量,并将其设置为1加上您希望增加的变量,其中前缀增量增加实际变量,在某些情况下可以提高性能。
0
主要原因是遵循C++中内置类型的语义,其中前缀增量/减量返回左值,后缀1返回右值。详情可查询here
相关问题
- 1. 类返回类型重载
- 2. 为什么python statistics.mean()返回一个int类型,而不是float
- 3. 重载返回类型?
- 4. 返回类型重载?
- 5. 为什么func1的返回类型是Unit,而func2是Int?
- 6. 构造函数返回我无类型而不是类类型
- 7. 为什么Class#getComponentType返回null而不是ArrayList(Java)的泛型类型?
- 8. 返回类型的重载运算符[]返回类型
- 9. 为什么重载的scala函数需要返回类型?
- 10. 为什么自动返回类型改变重载分辨率?
- 11. C++后缀递增运算符的常量返回类型
- 12. 引用类型的返回函数和后缀增量
- 13. 返回什么类型?
- 14. fwrite()返回什么类型?
- 15. 蟒蛇返回类型,而不是
- 16. 为什么明显的类型不匹配会提前返回?
- 17. 可以通过FlexibleInstances“重载”返回不同类型,还是匹配类型类?
- 18. CONFIGRET返回类型是什么意思?
- 19. 什么是MembershipUserCollection.GetEnumerator的返回类型();
- 20. 什么是document.getElementById()的返回类型
- 21. 什么是返回类型if`声明
- 22. 什么是枚举的返回类型|?
- 23. 什么是printf的返回类型
- 24. 什么是'消息返回类型请?
- 25. typeof的返回类型是什么?
- 26. 什么是boost :: ptr_vector :: pop_front()返回类型?
- 27. 返回类型应该是什么?
- 28. 什么是cookie的返回类型?
- 29. 什么是协变返回类型?
- 30. 什么是Http.get()。catch的返回类型?
那不是UB吗? – Slava
@Slava - 不,用户定义的操作符包含一个函数调用,它为表达式添加适当的序列点。对于int变量,这与* i ++ + ++ i *非常不同。 –
事实上,如果内置的链接前缀UB带来了有趣的问题。在这里问它http://stackoverflow.com/questions/35464793/why-chained-prefix-increment-decrement-for-builtin-type-is-not-ub-for-c – Slava