cpp17book icon indicating copy to clipboard operation
cpp17book copied to clipboard

029 「初期化文つき条件文」のコード例

Open akinomyoga opened this issue 6 years ago • 1 comments

使い所として以下の例が提示されていますが、

if ( auto ptr = std::make_unique<int>(42) ; ptr )
{
    // 処理
}

これは以下の点が気になります。

  1. 従来の C++ でも以下のようにすればできるということ、
if ( auto ptr = std::make_unique<int>(42) )
{
    // 処理
}
  1. std::make_unique<int>(42) は例外を投げるか、bool にキャストして true になるかのどちらかしかない気がします。だとすると、条件分岐の意義がないように思われること。

この新しい構文は、宣言される変数と実際に条件分岐に使われる式が異なる場合に力を発揮するので、例えば以下のような感じの例にするのはいかがでしょう。

if ( auto ptr = do_something(); *ptr )
{
    // 処理
}

akinomyoga avatar Oct 15 '17 13:10 akinomyoga

https://qiita.com/yumetodo/items/245e94a0e85db9bf5cbb#comment-804fa063c70a338358cb で私が前にかいた

if(std::size_t pos = s.find_first_of(' '); std::string::npos != pos){
   //なんか
}

みたいな例のほうがより実用的では

yumetodo avatar Oct 16 '17 02:10 yumetodo