5

私の質問は、「代入の結果を c++ の関数に渡すことはできますか?」です。

これを行う理由は、変数が特定の型、たとえば「int」を持っているためです。変数に値を代入し、「int」を引数として取るオーバーロードされた関数にすべてを渡します。

これを行う主な理由は、コードを少し小さくして読みやすくすることです。

val = 2
function(val);

私は得る:

function(val = 2);

それは大丈夫ですか?もしそうなら、何らかの理由でこれが貧弱なコーディング慣行であるという慣習はありますか?

ありがとう、飼料

4

3 に答える 3

5

はい

段落ごと§ 5.17 / 1

代入演算子 (=) と複合代入演算子はすべて右から左にグループ化されます。すべてが左オペランドとして変更可能な左辺値を必要とし、左オペランドを参照する左辺値を返します。

の後function(val = 2)、 関数への passの値を2代入します。valval

可読性について話すのは簡単ではありません。私は個人的にコードでこの方法を使用していません。

于 2013-05-01T11:43:37.043 に答える
1
 "Can I pass the result of an assignment to a function in c++?"

はい、もちろんできます。コンパイラは、このステートメントfunction(val = 2)を 2 つのステップで分割します。つまり、最初に 2 を割り当ててからval、パラメーター 2 で関数を呼び出します。したがって、最初の 2 行のアプローチは、2 番目のアプローチよりもはるかにクリーンで読みやすいです。

于 2013-05-01T12:00:35.943 に答える
1

C++ では確かにこれが可能ですが、私があなただったらそうはしません。

C++ でできることすべてが良い考えというわけではありません。優れたプログラマーは、可読性と保守性という 2 つのことを考慮する必要があります。あるブロガー (誰だったか思い出せません) は、プログラマーはコンピューターのためにプログラムするのではなく、プログラマーのためにプログラムするべきだと言ったことがあります。

これが意味することは、物事をできるだけ読みやすくするように努めるべきだということです。複数の行を 1 つに凝縮すると、実際には可読性が低下します。読者は立ち止まって複数のことを考えなければならず、要約されたステートメントを読むだけでなく分析しなければならないからです。

やりたいことは、タイプミスによって作成されたバグを隠すこともできます。たとえば、あなたが入力したとしましょう

function(val == 2)

間違って。コンパイラは bool を int に変換するため、これも許可します。別の読者も、パラメーター リストをよく理解していない限り、この間違いに気付きません。

優れたプログラミング構築テクニックに関するヒントやトリック、アドバイスに興味がある場合は、Code Complete 2を強くお勧めします。私はこの本を何年も持っていますが、今でもコードを改善するために新しいことを学んでいます。

于 2013-05-28T10:19:19.837 に答える