C と C における条件演算子のニュアンス
?: 構文で示される条件演算子、つまり三項演算子は、 C と C の両方で重要な役割を果たします。ただし、この演算子が左辺値を処理する方法に関して、2 つの言語間には微妙だが重要な違いが存在します。
左辺値の動作
C では、条件演算子は値を次の値に割り当てることができません。 lvalue (左側の値)、変更または代入できる変数またはオブジェクト。たとえば、次のコードは C では無効です:
<code class="c">(true ? a : b) = 1;</code>
代わりに、if-else ステートメントに頼るか、ポインタを使用して値を割り当てる必要があります:
<code class="c">*(true ? &a : &b) = 1;</code>
優先順位と結合性
もう 1 つの重要な違いは、次の優先順位と結合性に関するものです。代入演算子 (=) に対する条件演算子。 C では、 ?: 演算子と = 演算子は両方とも同じ優先順位を持ち、右から左にグループ化されます。これは、次のコードが有効であることを意味します:
<code class="cpp">(true ? a = 1 : b = 2);</code>
ただし、C では、等しい優先順位がないため、2 番目の式を括弧で囲む必要があります:
<code class="c">(true ? a = 1 : (b = 2));</code>
Implications in実践
この動作の違いは、クラス メンバーの値の設定など、さまざまなシナリオに影響を及ぼします。コンストラクター内で、またはオブジェクトへの参照を初期化します。 C プログラマは、C の左辺値の制限を認識し、条件式で左辺値を使用する場合は別のアプローチを採用する必要があります。
以上が条件演算子は C と C の左辺値に代入できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。