3項演算子とラムダ式
こういうときってよくあります。
C c; const int x = 10; if(x > 10) { const C c1; c = c1; // コピーが発生 } else { const C c2; c = c2; // コピーが発生 } // cを使う
でもこれだとconstを付けられません。このときよくある3項演算子の他に、ラムダ式で関数を作って返すという方法があります。
const int x = 10; const auto var = [x] { if(x > 5) { return x * 2; } else { return x * 3; } }(); const auto var2 = x > 5 ? x * 2 : x * 3;
unique_ptrでも同様にできますが、スタックにメモリを確保したいことが大半なのであまりいい方法ではないですね。
auto c = std::make_unique<const C>(); const int x = 10; if(x > 10) { auto c1 = std::make_unique<const C>(); c = move(c1); } else { auto c2 = std::make_unique<const C>(); c = move(c2); } // cを使う
Optionalのように、スタックに確保して、それにplacement newするようなものを書けばそれはそれで使いやすいかもしれません。今度書いてみます。