cpp17book
cpp17book copied to clipboard
029 「初期化文つき条件文」のコード例
使い所として以下の例が提示されていますが、
if ( auto ptr = std::make_unique<int>(42) ; ptr )
{
// 処理
}
これは以下の点が気になります。
- 従来の C++ でも以下のようにすればできるということ、
if ( auto ptr = std::make_unique<int>(42) )
{
// 処理
}
-
std::make_unique<int>(42)
は例外を投げるか、bool
にキャストしてtrue
になるかのどちらかしかない気がします。だとすると、条件分岐の意義がないように思われること。
この新しい構文は、宣言される変数と実際に条件分岐に使われる式が異なる場合に力を発揮するので、例えば以下のような感じの例にするのはいかがでしょう。
if ( auto ptr = do_something(); *ptr )
{
// 処理
}
https://qiita.com/yumetodo/items/245e94a0e85db9bf5cbb#comment-804fa063c70a338358cb で私が前にかいた
if(std::size_t pos = s.find_first_of(' '); std::string::npos != pos){
//なんか
}
みたいな例のほうがより実用的では