[解決済み] CとC++で+=の結果はどうなりますか?
2023-02-21 02:57:17
質問
次のようなコードがあります。
#include <stdio.h>
int main(int argc, char **argv) {
int i = 0;
(i+=10)+=10;
printf("i = %d\n", i);
return 0;
}
gccでCのソースとしてコンパイルしようとすると、エラーが出ます。
error: lvalue required as left operand of assignment
しかし、私はg++を使用してC + +ソースとしてそれをコンパイルすると、私は何のエラーも得られず、私は実行可能ファイルを実行するとき。
i = 20
なぜ動作が違うのか?
どのように解決するのですか?
複合代入演算子のセマンティクスがCとC++で異なっています。
C99標準、6.5.16、パート3。
代入演算子は、左オペランドによって指定されたオブジェクトに値を格納する。代入式は 代入式は、代入後の左オペランドの値を持ちますが、それは lvalueではありません。
C++の5.17.1では
代入演算子(=)と複合代入演算子はすべて右から左へグループ化されます。すべて、左オペランドとして変更可能な lvalueを必要とし、代入が行われた後、左オペランドの型と値を持つlvalueを返します。
EDITです。
の動作は
(i+=10)+=10
の動作は、C++98 では未定義ですが、C++11 では明確に定義されています。 以下を参照してください。
この回答
による質問に対する
NPE
をクリックすると、規格の関連部分が表示されます。
関連
-
[解決済み] テスト
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む