C、C++差異の左値右値
CとC++は文法の詳細にいくつかの違いがあります.一般的には、これらの違いは結果の違いをもたらすのに十分ではないかもしれませんが、コードによっては影響があります.
今回は、主に左の値と右の値の違いをまとめてみました.
Cでは、多くの左値演算子の結果は左値ではありませんが、C++では、論理的に実行可能であれば、左値演算子の結果は左値のままです.C++のこの方式は,演算子式間の柔軟性をより大きくする.
1、++i、私达はすべてC++の中で慣れて、iはプラスしてから自分に戻ります;しかし、Cにおいてiが加算された後、一時的なコピーが返される.すなわち、i++と同様であり、この結果は左の値、すなわち(++i)=0として不正である.だから私はこれがコードの中でまだ多くのforサイクルの中でi++を使っていると思っています.Cの中で、i++は++iの効率と同じだと思います.
2、=、同様に、Cにおける結果は右であり、すなわち(a=b)=cはCにおいては合法ではないが、C++においては可能である.
3、?:,Cで返されるブランチの結果は右で、C++では、両方のブランチが左でタイプが同じであれば、結果も左であると規定されています(C++プログラム設計言語-特別版第6.2節参照).次のようになります.
今回は、主に左の値と右の値の違いをまとめてみました.
Cでは、多くの左値演算子の結果は左値ではありませんが、C++では、論理的に実行可能であれば、左値演算子の結果は左値のままです.C++のこの方式は,演算子式間の柔軟性をより大きくする.
1、++i、私达はすべてC++の中で慣れて、iはプラスしてから自分に戻ります;しかし、Cにおいてiが加算された後、一時的なコピーが返される.すなわち、i++と同様であり、この結果は左の値、すなわち(++i)=0として不正である.だから私はこれがコードの中でまだ多くのforサイクルの中でi++を使っていると思っています.Cの中で、i++は++iの効率と同じだと思います.
2、=、同様に、Cにおける結果は右であり、すなわち(a=b)=cはCにおいては合法ではないが、C++においては可能である.
3、?:,Cで返されるブランチの結果は右で、C++では、両方のブランチが左でタイプが同じであれば、結果も左であると規定されています(C++プログラム設計言語-特別版第6.2節参照).次のようになります.
{
(1 ? i=11 : j)=22; // C++ i = 22, C
printf("%d %d
", i, j);
1 ? i=11 : j=22; // C++ i = 11, C , : 1 ? i=11 : (j=22);
printf("%d %d
", i, j);
// , ?: =,
// , 。
// C++ :
// (1) ? (i=11) : (j=22);
// C++ - 6.2 , :
// a = b