[解決済み] C++のforループに2つのincrement文を入れるにはどうしたらいいですか?
2023-01-13 16:07:28
質問
の中で2つの変数をインクリメントしたい。
for
-ループ条件において、1つではなく2つの変数をインクリメントしたいです。
のようなものですね。
for (int i = 0; i != 5; ++i and ++j)
do_something(i, j);
これはどのような構文ですか?
どのように解決するのですか?
よくあるイディオムとして カンマ演算子 を使うことです。これは両方のオペランドを評価し、2 番目のオペランドを返します。このように
for(int i = 0; i != 5; ++i,++j)
do_something(i,j);
しかし、本当にコンマ演算子なのでしょうか?
今これを書いたら、コメント提供者が、それは実際には for 文の中の特別な構文上の糖であり、まったくカンマ演算子ではないことを示唆しました。私は以下のように GCC でそれをチェックしました。
int i=0;
int a=5;
int x=0;
for(i; i<5; x=i++,a++){
printf("i=%d a=%d x=%d\n",i,a,x);
}
x が a の元の値を拾うことを期待していたので、x には 5,6,7... と表示されるはずだったのですが、このような結果になりました。
i=0 a=5 x=0
i=1 a=6 x=0
i=2 a=7 x=1
i=3 a=8 x=2
i=4 a=9 x=3
しかし、パーサーが本当にカンマ演算子を見るように式を括弧で囲むと、次のようになります。
int main(){
int i=0;
int a=5;
int x=0;
for(i=0; i<5; x=(i++,a++)){
printf("i=%d a=%d x=%d\n",i,a,x);
}
}
i=0 a=5 x=0
i=1 a=6 x=5
i=2 a=7 x=6
i=3 a=8 x=7
i=4 a=9 x=8
当初、これはコンマ演算子として動作していないことを示していると思いましたが、結局のところ、これは単に優先順位の問題であり、コンマ演算子には 可能な限り低い優先順位 であるため、式 x=i++,a++ は事実上 (x=i++),a++ として解析されます。
すべてのコメントをありがとうございました。興味深い学習体験でした!私は長年Cを使ってきました。
関連
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] B "の印刷が "#"の印刷より劇的に遅いのはなぜですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] ( for... in ) と ( for... of ) の文の違いは何ですか?
最新
-
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++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】'cout'は型名ではない
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】デバッグアサーションに失敗しました