1. ホーム
  2. c++

[解決済み] ループコンディションで使用した場合、strlenは複数回計算されるのでしょうか?

2022-10-19 03:51:41

質問

以下のコードが冗長な計算を引き起こす可能性があるのか、それともコンパイラ固有のものなのか、よくわかりません。

for (int i = 0; i < strlen(ss); ++i)
{
    // blabla
}

ウィル strlen() は毎回計算されるのでしょうか? i が増加するたびに計算されるのですか?

どのように解決するのですか?

はい。 strlen() は各反復で評価されます。理想的な状況では、オプティマイザーが値が変化しないことを推論できる可能性がありますが、個人的にはそれを当てにしないことにしています。

私なら次のようなことをします。

for (int i = 0, n = strlen(ss); i < n; ++i)

または、おそらく

for (int i = 0; ss[i]; ++i)

は、文字列が反復処理中に長さを変えない限りは有効です。もし変更される可能性があるのであれば strlen() を毎回呼び出すか、より複雑なロジックでそれを処理する必要があります。