0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

学生時代C++14を使っていた新人が、C++17を使って感動した話

0
Posted at

あ、お久しぶりです。

最近、新人研修でC++17を使う機会があり、「規格が新しくなったくらいでそんなに変わるのかな?」と思っていました。

実際に使ってみると、毎日のコーディングがかなり楽になる機能がいくつもありました。

今回は、その中でも特に「これは便利!」と感じた3つを紹介します。


1. if文の初期化

C++14ではこんな感じでした。

auto enemy = FindEnemy();

if (enemy)
{
    enemy->Damage(10);
}

変数はif文を抜けても生き続けます。

C++17では

if (auto enemy = FindEnemy(); enemy)
{
    enemy->Damage(10);
}

と書けます。

変数のスコープをif文だけに限定できるので、

  • 余計な変数が残らない
  • 「この変数はここだけで使う」という意図が伝わる

という点が気に入りました。


2. std::optional

今までは、値が存在しないことを表現するためにnullptrや特殊な値を返すことがよくありました。

例えば

Player* FindPlayer();

int GetPlayerIndex(); // 見つからなければ -1

のような設計です。

C++17では

std::optional<int> GetPlayerIndex();

のように書けます。

使う側も

if (auto index = GetPlayerIndex())
{
    players[*index].Update();
}

となり、「値がない可能性がある」ということがコードからすぐ分かります。


3. std::string_view

これは一番「なるほど!」と思った機能でした。

例えば

void LoadTexture(std::string_view path);

としておけば、

LoadTexture("player.png");

std::string path = "enemy.png";
LoadTexture(path);

どちらもそのまま渡せます。

文字列をコピーしないので効率も良く、APIも作りやすいと感じました。


まとめ

C++17には他にも便利な機能がありますが、今回の新人研修で特に感動したのは次の3つでした。

  • if文の初期化
  • std::optional
  • std::string_view

どれも派手な機能ではありませんが、「毎日コードを書く人ほど恩恵を感じる機能」だと思います。

学生時代はC++14しか使ったことがなかったので、「規格が変わるだけでこんなに書きやすくなるんだ」と実感した新人研修でした。

今後C++20も使う機会があれば、またこんな感じでまとめてみようと思っています。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?