1. 程式人生 > >從左值的定義來看i++為什麼不能作為左值,而++i可以作為左值

從左值的定義來看i++為什麼不能作為左值,而++i可以作為左值

  今天看書見到如下程式碼:

  int a=2;

  ++a++;

  根據操作符的優先順序和結合性知,操作符++的優先順序為3,結合性為右結合,即++a++;可以理解為++(a++);

但我把程式碼放在vs2015上,結果報錯,如圖:

意思就是所a++不能作為左值,那a++為什麼不能作為左值呢?我們先來看左值的定義:

  左值(lvalue) 是B語言/C語言/C++語言類C語言中的一類表示式。“左”(left)的原意是指可以放在賦值符號“=”的左邊,但其實也表示能作為&和++等操作符運算元(B語言中已經如此)。左值不但具有空間實體,還具有讀寫訪問權。

  現在我們來看a++的實現:

  int temp;

  temp=a;

  a=a+1;

  return temp;

  因為a++返回的是編譯器自動分配的臨時變數temp,而這個temp並不是你程式中定義的可定址變數的引用 ,也就是說你不能通過地址對它進行操作.(換句話說就是不能作為左值)。

  而++a的實現為:

  a=a+1;

  return a;

    因為++a返回的是a,它是程式中定義的可定址變數的引用,所以它可以作為左值。