2017-09-01 2 views
-5

これらの状況を扱うための標準がどのように定義されているのか、ポスト/プリインクリメントの対象となる変数が式のものと同じステートメントで使用されているそれは関数呼び出しの引数として使用されています。サンプルコードが正しいであろう次のポストインクリメント演算が同じ文

char a[SZ]; 

次例えば

テイク?

strlcpy(&a[i++],"Text",SZ-i-1); 

strlcpy(&a[i++],"Text",SZ-i); 

"" もしコンマiが++の計算や

ために使用されるであろう

";"セミコロン

??

+0

@ tobi303例のポイントは、この状況でどのように動作するかを理解することです。はい、私は怠惰なプログラマです:) –

答えて

2

この場合、「カンマ区切り式」は関数のパラメータ(strlcpy)であるため、C++ 17であっても式の評価順序は未定義です。 しかし、C++ 17では、式の評価が引数間でインターリーブされないようにして、各式が別の式を作成する前に完全に形成されるようにします。 したがって、strlcpy(&a[i++],"Text",SZ-i)では、iの値に頼ることはできません。実装によっては異なる動作を示す可能性があります。未定義の動作ではないので、それは古い値のiになるか、古い値に1を加えた値になります。

+0

そのような明快さ、感謝:) –

関連する問題