C++ C++;增量前和增量后重载。如何';它';知道

C++ C++;增量前和增量后重载。如何';它';知道,c++,overloading,operator-keyword,C++,Overloading,Operator Keyword,为什么这里的人没有像上面那样的&之后呢?我知道参数是一个引用和一个int。但是什么int?我在任何地方都看不到这样调用的函数,在int main()中,p1(25)是构造函数,而不是函数。他如何知道调用p1++和调用p++时该做什么。我知道重载,但我不明白第一个函数中的person是如何工作的,第二个函数中的int是什么。多谢各位 friend const person& operator++(person &a); person&a和person&a的意思相同。我也倾向于这

为什么这里的人没有像上面那样的&之后呢?我知道参数是一个引用和一个int。但是什么int?我在任何地方都看不到这样调用的函数,在int main()中,p1(25)是构造函数,而不是函数。他如何知道调用p1++和调用p++时该做什么。我知道重载,但我不明白第一个函数中的person是如何工作的,第二个函数中的int是什么。多谢各位

friend const person& operator++(person &a); 

person&a
person&a
的意思相同。我也倾向于这样做:当只指定一个类型时,把它放在类型旁边;当声明一个变量(在本例中是参数)时,把它放在变量旁边。是的,这意味着尽管使用
a
的语法与非指针的语法相同,但该参数实际上是作为引用(指针)传递的


方法之前的
const
的目的是指示该方法不修改类实例。这告诉编译器,在类的const实例上调用此方法是安全的。

预增量重载的原因,即

const person operator++(person& a, int)
返回对
人员
(因此为
&
)和后期增量的引用,即

const person& operator++(person& a) // "const" is optional
返回
人员
,而不是对人员的引用(因此,没有
&
)是指从增量前返回的对象状态与正在操作的对象状态相同,而增量后必须返回其旧状态的对象,即增量前的状态

两个操作符都将作为参数传入的对象保持在更改状态;两个对象的新状态相同。但是,增量后必须在增量之前以旧状态返回对象

为了让它起作用,需要制作一份副本。一旦复制并输入图片,引用就消失了:返回对本地对象的引用是未定义的行为,因此只能按值返回

这就是
person aux=a行用于:它创建处于增量之前状态的人员的副本。应用增量后,将
aux
副本返回给调用者
aux
是一个局部变量,因此必须通过值(即无符号)返回


int
而言,这是语言设计者引入的一种语法约定。乍一看,这看起来有点奇怪,但如果你想到他们可以使用的其他选项(引入不同的关键字,为其中一个重载添加代理名称,等等),他们选择的选项就不再显得太奇怪了。

显然你还没有读够“手册”。非常有用,谢谢Andy Prowl,另一个问题是你的增量,很多问题都可以通过阅读C++ FAQ来回答:谢谢Thomas Matthews,网站的资源丰富,PARASIFIFT!很好,它为其他操作符覆盖了所有重载。@erasmus77:您可能认为它没有用,但它确实有用。在C++的每本书中解释了“&”的含义,以及前增量和后增量的工作方式。如果你不知道这些东西是什么意思,那么我能给你的最有用的建议就是多读一些关于它的东西。但是在这种情况下,它没有任何意义,对吗?该类没有常量实例。@erasmus77:在声明这些类的实例之前先声明这些类。应该编写一个类,以便它可以在多种情况下使用。通过这种方式编写类,如果将来有一个const实例被创建,那么它可能会更容易使用。好的编程就是要做出即使在意外情况下也能工作的好设计。这只是个好习惯,我明白了。非常感谢。前置增量不需要是
const
——后置增量不需要是
const
,以防止对临时变量进行无意义的赋值variable@GlennTeitelbaum从技术上讲,即使是帖子也不需要是
const
,但正是因为您提到的原因,最好将其设置为
const
。不过,我经常只是为了“对称”而设置pre-increment
const
const person& operator++(person& a) // "const" is optional
const person operator++(person& a, int)