[解決済み] C++のカンマ演算子とreturnの動作が違う?
質問
これ( カンマ演算子 ):
#include <iostream>
int main() {
int x;
x = 2, 3;
std::cout << x << "\n";
return 0;
}
出力 2 .
しかし、もし
return
をカンマ演算子と一緒に使うと、このようになります。
#include <iostream>
int f() { return 2, 3; }
int main() {
int x;
x = f();
std::cout << x << "\n";
return 0;
}
出力 3 .
でカンマ演算子の動作が異なるのはなぜですか?
return
?
どのように解決するのですか?
によると
演算子の優先順位
,
カンマ演算子
よりも優先順位が低く
operator=
よりも優先順位が低く、したがって
x = 2,3;
と同じです。
(x = 2),3;
. (演算子の優先順位は、演算子がどのように引数に束縛されるかを決定し、その優先順位に従って他の演算子よりきつく、または緩くなります)。
カンマ式は
(x = 2),3
であって
2,3
.
x = 2
が最初に評価され(そしてその副作用が完了し)、次にその結果が破棄され、次に
3
が評価される(実際には何もしない)。そのため
x
は
2
. ただし
3
はコンマ式全体の結果である(つまり
x = 2,3
に代入するために使われることはないでしょう。
x
. (これを
x = (2,3);
,
x
が割り当てられます。
3
.)
については
return 2,3;
の場合、カンマ表現は
2,3
,
2
が評価された後、その結果は破棄され、次に
3
が評価され、コンマ式全体の結果として返されます。
returnステートメント
によって後で返されます。
式とは、演算子とそのオペランドの並びで、計算を指定するものです。
x = 2,3;
は
表現文
,
x = 2,3
がここでの表現です。
セミコロンが続く式はステートメントです。
構文
attr(optional) expression(optional) ; (1)
return 2,3;
は
ジャンプ文
(
リターンステートメント
),
2,3
がここでの表現です。
構文
attr(optional) return expression(optional) ; (1)
関連
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] JavaScriptで複数の値を返す?
-
[解決済み] 未定義の動作とシーケンスポイント
-
[解決済み] CSS Flexboxで、"justify-items "と "justify-self "プロパティはなぜないのですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
最新
-
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++でint型に無限大を設定する
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】C++の余分な資格エラー
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み】'std::cout'への未定義の参照