は:Qtのforeachの第2項は一度だけ評価されますか?私はこのコードを持っている場合は
foreach (QListWidgetItem *ii, selectedItems()) {
urls.push_back(ii->data(Qt::ToolTip).toString());
}
をselectedItems()
一度だけ呼び出されますか?
は:Qtのforeachの第2項は一度だけ評価されますか?私はこのコードを持っている場合は
foreach (QListWidgetItem *ii, selectedItems()) {
urls.push_back(ii->data(Qt::ToolTip).toString());
}
をselectedItems()
一度だけ呼び出されますか?
それは返されたコンテナのコピーを作成し、それを使用します。
関連(Qt foreach keywordのドキュメントを参照してください):のQtのforeach常にコピーコンテナので
を読んでください。一方、コピーするとループ内の元のコンテナを変更できます何も壊すことなくそれともブーストでも安全ですか?それを実際に使ったことはありません。 –
@Sergey:True、しかし、私の経験では、もっと一般的なケースは、何かを修正する(つまり反復する)、またはオリジナルを修正したくないコンテナ。 – Macke
trueですが、Qtではコンテナがループ内で暗黙的に変更されることがあります。例えば、ループ内にシグナルを出すメソッド呼び出しがいくつかあり、そのシグナルに接続されたスロットがコンテナを変更します。これは、マルチスレッドの場合と同じくらい悪くはありません。なぜなら、すべてのスレッドが1つのスレッド内で実行されているからですが、メソッド呼び出しの順序はそれほど明白ではありません。 –
パフォーマンスパートについては、http://stackoverflow.com/questions/771008/for-loop-vs-foreach-in-c – speakman