[英]How to properly overload postfix increment operator?
有沒有辦法修改此代碼,以便在編譯時不會收到警告? 此外,這個代碼可能不會導致段錯誤,因為它將訪問的內存檢索在運算符函數調用結束時取消分配的main中的x值?
class A {
int x; /* value to be post-incremented */
public:
A() { /* default constructor */
}
A( A & toCopy ) { /* copy constructor */
x = toCopy.x;
}
A & operator++(int) { /* returns a reference to A */
A copy( *this ); /* allocate a copy on the stack */
++x;
return copy; /* PROBLEM: returning copy results in a warning */
} /* memory for copy gets deallocated */
}; /* end of class A */
int main() {
A object;
object.x = 5;
cout << (object++).x << endl; /* Possible segfault ? */
}
您需要返回一個值(不是引用):
A operator++(int) { /*...*/ }
這將解決編譯器警告,你不會得到一個懸空引用。
后綴運算符不通過引用返回,按值返回:
A operator++(int) { /* returns a copy */
A copy( *this ); /* allocate a copy on the stack */
++x;
return copy;
}
請注意,在您的代碼中,您將返回對局部變量的引用,該變量具有未定義的行為 。
另外還要注意,返回副本可以easilly編譯器通過省略掉NRVO (即代碼它相當NRVO友好 )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.