2016-12-01 8 views
1

私はいくつかのコードを書いている間に私の心の中に飛び出したものについて疑問を抱いていました。このコードでif/else-ifステートメントはこれをどのように処理しますか?

for (int i = 0; i < num_bits; i++) { 
     if (bits.at(i) == 0) { 

     } 

    else if (bits.at(i) == 1) { 

    } 
} 

bitsは文字列であり、num_bitsは、文字列の長さです。

この場合、プログラムはifと `else if`の両方でstring.at(i)を実行しますか、それを一度実行してどこかに保存して両方のステートメントで使用しますか?質問がはっきりしているかどうかは分かりませんが、回答に感謝します。

答えて

1

考えてみましょう。その関数への呼び出しがすべて同じ結果を生成することを、エンジンはどのように知っていますか?

+0

ありがとう、それは私の最初の考えでした。関数を常に呼び出すのではなく、文字列をchar配列やベクトルなどに変換する方が効率的だと思いますか? – user2851949

+0

変数に値を格納し、変数と比較することから始めます。メソッドを一度呼び出すだけで済みます。あるいは、-O1以上のビット[i] – Hampus

+1

++を使用すると、一時的なものを作成できるほどスマートです。アセンブリは明示的な一時的なものと同じ[https://godbolt.org/g/XVleS5]と[なし](https://godbolt.org/g/ecH5gI)であることに注意してください。 –

0

この関数を呼び出すと、この関数は2回実行されます。より重い操作をする必要がある場合は、forループの先頭で宣言したり、foreachを使用したりすることができます。

関連する問題