1
2

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++

Last updated at Posted at 2023-12-11

この記事について

身内向けのアドカレ用に書いた記事です。
久しぶりにC++を触って、結構機能が増えてたのでこの感動を押し付ける分かち合うために記事書きました。
※C++履修者向けになってます。ごめんね🙇
※かさ増しのために古い機能も入れてます。ごめんね🙇

参照型 (C++11)

これまでのC++で参照といえばアドレス参照が一般的でした。

pointer.cpp
  void hoge(const std::string* src) {
    // なにかする
  }

  // コピーされるので効率悪い
  void fuga(const std::string src) {
    // なにかする
  }

  int main() {
    std::string src = "文字列";
    hoge(&src);
    fuga(src);
  }

参照型が追加されたので、アドレス渡しとか気にしなくてよくなりました。
ぬるぽも起きないね、やったね。

reference.cpp
  void hoge(const std::string& src) {
    // なにかする
  }
  
  int main() {
    std::string src = "文字列";
    hoge(src);
  }

コンパイル時計算 (C+11)

constexprを使うとコンパイル時に計算が行われます。
そのため実行時の計算が減りただでさえ速いのがさらに速くなります。やったね。

constexpr.cpp
  constexpr int sum(int a, int b) {
    return a + b;
  }

  // sはコンパイル時に計算されて「120」になる 速くなる 正義
  constexpr s = sum(100, 20);

構造化束縛 (C++17)

モダンな言語によくあるタプルの展開ができるようになりました。
今風でかっこいいね。

tuple.cpp
  std::tuple<int, std::string> moge() {
    return { 100, "name" };
  }

  int main() {
    auto [age, name] = moge();
  }

ちなみに、ちょっと設定すれば自前で作ったクラスでもできるらしい。

名前付きモジュール (C++20)

今まではヘッダー書いてそれをincludeしていました。
includeするたびにヘッダーが展開されるので、100万行のヘッダーなんぞを何度もincludeした日には目も当てられない大惨事になっていました。

include.h
namespace hoge {
  void doHoge() {
    // めんどいのでinline
  }
}
include.cpp
// include.hの中身がここに展開される
#include "include.h"

int main() {
  hoge::doHoge();
}

新しく追加された名前付きモジュールでは、翻訳単位がモジュール(.ixx)ごとになっているので、この心配がなくなりました。

module.ixx
export module Hoge;

namespace hoge {
  void doHoge() {
    // めんどいのでinline
  }
}
module.cpp
// Hogeモジュールはコンパイル済み
// includeのように展開されたりしない
import Hoge;

int main() {
  hoge::doHoge();
}

まとめ

Rustとか、C++の代替になりそうな言語も出てきてますが、実はC++26がすでに策定されていたりして、まだまだ長く使われていきそうです。
君もC++使いにならないか?

1
2
0

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?