C++ 關於 i++ 和 ++i 的左值、右值問題


問題描述

對於下面一段代碼,爲什麼第一個取址操作錯誤,而第二個取址操作卻是正確的。

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;  // 返回被取回的值
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章