为什么前缀增量器重载返回类型而不是类型?

Why does Prefix Incrementor Overload return Type& instead of Type?

本文关键字:类型 返回类型 重载 前缀 为什么      更新时间:2023-10-16

刚开始做运算符重载,我的老师没有太深入地研究它们,所以我想知道为什么前缀/后缀递增/递减的返回类型不同。当我看到前缀重载时,返回类型写为 Type&,但后缀的返回类型写为 Type。我做了没有 & 的前缀,函数都运行正常。返回类型是否会影响任何内容,或者它只是区分前缀和后缀的另一种方法?

原因是允许链接:

++ ++ ++ i;

若要允许i以三倍递增,++必须返回引用并获取引用。如果它返回临时副本,则第二个++将递增...临时副本(实际上,临时副本不会绑定&,因此它甚至不会编译(。

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

主要原因是遵循C++中内置类型的语义,其中前缀递增/递减返回左值,后缀一返回右值。详细信息可以在这里找到