以下は、ライブラリのコーディング スタイル ドキュメントから見つけた抜粋です。
可能であれば、名前付きオブジェクトを格納するよりも一時オブジェクトを使用する方がよい場合があります。たとえば、次のようになります。
DoSomething( XName("何とか") );
それよりも
XName n("何とか"); DoSomething( n );
これにより、コンパイラによる呼び出しの最適化が容易になり、関数のスタック サイズが縮小される可能性があります。ただし、一時的なオブジェクトの有効期間を考慮することを忘れないでください。
オブジェクトを変更する必要がなく、有効期間の問題も問題ないと仮定すると、このガイドラインは正しいでしょうか? このご時世だから仕方ないと思っていました。ただし、名前付きオブジェクトを回避できない場合もあります。
XName n("blah");
// Do other stuff to mutate n
DoSomething( n );
また、ムーブ セマンティクスを使用すると、一時変数が削除されるため、次のようなコードを記述できます。
std::string s1 = ...;
std::string s2 = ...;
std::string s3 = ...;
DoSomething( s1 + s2 + s3 );
ではなく (コンパイラは C++03 で次のように最適化できると聞きました):
std::string s1 = ...;
std::string s2 = ...;
std::string s3 = ...;
s1 += s2;
s1 += s3; // Instead of s1 + s2 + s3
DoSomething(s1);
(もちろん、上記は に要約される可能性がありますが、上記measure and see for yourself
の一般的なガイドラインに真実があるかどうか疑問に思っていました)