[英]overloading pre-increment and post-increment
我看到了一個關於實現預增量和后增量的示例,聲稱可以將重載預增量定義為
T& T ::operator++()
並且可以按照預增量來定義和實現過載后增量,如下所述
const T T::operator++(int){
const T old(*this);
++(*this);
return old;
}
我有兩個問題:
1)“舊”是什么意思?
2)假設++(* this)使用預增量,原始預增量定義沒有參數。 但是,這里有*。
“舊”是什么意思?
該方法是后增量。 返回當前值(“舊值”),然后遞增值(“新值”)。
假設++(* this)使用預增量,而原始預增量定義沒有參數。 但是,這里有*。
*this
不是一個論點。 括號不是必需的,它們是為了便於閱讀。
它等同於++*this
。
1)“old”是“this”在遞增之前所具有的值。 后增量應該返回該值。
2)++(* this)相當於this-> operator ++()
2)假設++(* this)使用預增量,原始預增量定義沒有參數。 但是,這里有*。
++是一元運算符,所以它有一個參數可以。 每當您將運算符作為成員函數重載時,第一個參數就是當前對象。
未使用的int
參數只是區分增量前和后增量的黑客,因為operator++
可能意味着。 后增量並不真正接受整數*,它只是一種(笨拙的)語言結構。
您還可以將這些運算符重載為自由函數:
struct T
{
int n;
};
T& operator++(T& t) { ++t.n; return t; }
T operator++(T& t, int) { T old(t); ++t; return old; }
int main()
{
T a;
T b = a++;
++b;
}
*正常使用情況下。 使用函數調用語法調用運算符時,可以傳遞一個額外的int來區分這兩者:
operator++(a); //calls-preincrement
operator++(b, 1); //calls post-increment
old
只是一個變量名(它不是關鍵字,如果那是你想知道的)。 它用於保存操作數的先前值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.