まず、Date temp = *this の場合、これら 2 つの関数の戻り値の型が異なる理由がわかりません。
++これを古き良き時代の状況と比較してみましょうint。検討
int i = 1;
int j = i++;
この後、jの古い値を保持しますがi、それi自体はインクリメントされます。したがって、 onが次のように定義されiているかのように、増分の前にコピーされている必要があります。++int
class int { // pseudocode
public:
int operator++(int)
{
int temp = *this;
*this += 1;
return temp;
}
};
OTOH、その後
int i = 1;
int j = ++i;
iとj同じ値を持っているため、次のよう++に実装されている必要があります
int &operator()
{
*this += 1;
return *this;
}
intからへの変更によりint&利便性が向上します。コピーを作成する必要がなく++i、参照が必要な状況で使用できます。
次に、2 番目の関数のパラメーターに変数名がないのはなぜですか?
絶対に使ってはいけないからです。引数は構文上のギミックとして存在するため、コンパイラは 2 つのタイプ (プレインクリメントとポストインクリメント) を互いに区別できますoperator++が、明確に定義された値はありません。名前を付けると、適切な警告が有効になっているコンパイラで「未使用の識別子」オプションがトリガーされます。