きままにブログ

プログラミングを主とした私のメモ帳です。寂しいのでコメントください笑

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するようなものを書けばそれはそれで使いやすいかもしれません。今度書いてみます。