(C++)i++とi++の左、右の問題について

1168 ワード

1、左と右の値は何ですか.
左の値は式の左側に現れる値(等号の左側)で、データ値を格納するメモリのアドレスであり、変数のアドレスとも呼ばれる.
右の値は、あるメモリアドレスに格納されたデータであり、変数とも呼ばれるデータである.
左の値は右の値として使用できますが、右の値は左の値ではありません.
そのため、アドレスを取るには左の値しかありません.
 
2、二つの質問を挙げます.
int i = 0;
(i++)+=i;//エラー
(++i)+=i;//正しい
int *ip = &(i++);//エラー
int *ip = &(++i);//正しい
 
3、どうしてi++は左の値にできないのですか.
i++とi++の実現を見るとわかります.
//     :
int& int::operator++() //            ,                   
{//      ,            1 
  *this += 1;  //   
  return *this;  //    
}
//    :
const int int::operator++(int) //             ,          。
{//    ,          
  int oldValue = *this;  //    
  ++(*this);  //   
  return oldValue;  //        
}

簡単に理解すると、i++は一時変数を返し、関数が戻った後にアドレスされて得られず、アドレスではなくデータ値であるため、左値として使用できない.
より簡単なコード解釈:
// i++:
{
int tmp;
tmp=i;
i=i+1;
return tmp;
}

// ++i:
{
i=i+1;
return i;
}

 
参考記事:
http://blog.csdn.net/zlhy_/article/details/8349300