(原地址:https://www.zhihu.com/question/19811087)
int i = 0;int *p1 = &(++i); //正確int *p2 = &(i++); //錯誤++i = 1; //正確i++ = 5; //錯誤那么為什么『i++ 不能作為左值,而++i 可以』?看它們各自的實現就一目了然了:// 前綴形式:int& int::Operator++() //這里返回的是一個引用形式,就是說函數返回值也可以作為一個左值使用{//函數本身無參,意味著是在自身空間內增加1的 *this += 1; // 增加 return *this; // 取回值}//后綴形式:const int int::operator++(int) //函數返回值是一個非左值型的,與前綴形式的差別所在。{//函數帶參,說明有另外的空間開辟 int oldValue = *this; // 取回值 ++(*this); // 增加 return oldValue; // 返回被取回的值}如上所示,i++ 最后返回的是一個臨時變量,而臨時變量是右值。
新聞熱點
疑難解答