まず、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++
が、明確に定義された値はありません。名前を付けると、適切な警告が有効になっているコンパイラで「未使用の識別子」オプションがトリガーされます。