式テンプレート手法により、次のような行列式
D = A*B+sin(C)+3.;
計算パフォーマンスの点では、手書きのforループとほとんど同じです。
さて、次の2つの式があるとします
D = A*B+sin(C)+3.;
F = D*E;
cout << F << "\n";
for式テンプレートによる「古典的な」実装では、計算パフォーマンスは、2 つのループを順番に実行した場合とほぼ同じになります。=これは、演算子が検出された直後に式が評価されるためです。
私の質問は: の値が実際には使用されておらず、D対象の値が の唯一の要素であることを認識するための手法 (たとえば、プレースホルダーの使用) はありますか?F
F = E*(A*B+sin(C)+3.);
forが評価され、全体のパフォーマンスは 1 つのループのパフォーマンスと同等ですか?
もちろん、そのような仮説的な手法は、式を評価するために戻ることもできるはずです。
D = A*B+sin(C)+3.;
コードの後半で の値Dが必要な場合。
よろしくお願いします。
編集: Evgeny によって提案されたソリューションを実験した結果
元の指示:
Result D=A*B-sin(C)+3.;
計算時間: 32ms
2 つのステップ命令:
Result Intermediate=A*B;
Result D=Intermediate-sin(C)+3.;
計算時間: 43ms
ソリューションauto:
auto&& Intermediate=A*B;
Result D=Intermediate-sin(C)+3.;
計算時間: 32ms。
結論としてauto&&、単一命令ケースの元の計算時間を復元することができました。
編集: Evgeny の提案に従って、関連するリンクを要約する