問題描述
對於下面一段代碼,爲什麼第一個取址操作錯誤,而第二個取址操作卻是正確的。
int i = 0;
int *ip = &(i++); //錯誤
int *ip = &(++i); //正確
左值右值簡介
- 左值:能夠取地址的量;
- 右值:不能取地址的量。
i++ 與 ++i 的區別
++i 的函數實現:
// 前綴形式:
int& int::operator++() //這裏返回的是一個引用形式,就是說函數返回值也可以作爲一個左值使用
{//函數本身無參,意味着是在自身空間內增加1的
*this += 1; // 增加
return *this; // 取回值
}
i++ 的函數實現:
//後綴形式:
const int int::operator++(int) //函數返回值是一個非左值型的,與前綴形式的差別所在。
{//函數帶參,說明有另外的空間開闢
int oldValue = *this; // 取回值
++(*this); // 增加
return oldValue; // 返回被取回的值
}