2025-05-30

C++便利そうな機能

プログラミング言語のC++に暫く離れていたが便利そうな機能が出来ていたんですね。

自分が調べても色々理解しきれていないのでここの紹介で間違いがあったらすみません

std::variant(C++17以上)

異なるクラスを代入して保持するものであり、例えばunionのような機能を実現できるらしい。

クラスが大きくなると使わない変数も出てくるかもしれない。

例えばゲーム武器と鎧が同じクラス場合

武器として使う場合攻撃変数必要でも守備変数必要なく、

鎧として使う場合守備変数必要でも攻撃変数必要ない場合らしい。

このような使わない変数隠蔽バグを作ってしまうことを回避できるらしい

std::optional(C++17以上)

任意の値と無効値を保持できるらしい。

例えば、boolで実装する場合は、関数戻り値をboolで成功か失敗かを返し、欲しい値を関数引数ポインタに返す・・というプログラミングになると思う。

std::optionalでは戻り値として欲しい値と失敗かどうかを一緒に返せるらしい。

std::unique_ptr(C++11以上)

メモリの動的確保だが自分deleteしなくて良いのでメモリ解放忘れを防いでくれる。

スマートポインタは前からあったが現在の推奨はstd::unique_ptr

(C++20以上と記載していましたがC++11とのご指摘を受けたため修正しました。すみませんでした。)

enum class(C++11以上)

列挙クラス

列挙型だが従来の列挙型と異なり変数名が外部と衝突しない

nodiscard(C++17以上)

nodiscard属性が付いている関数戻り値の受け取りが必須となる。

他、auto(型推論)、for each

ちなみにstd::optional<std::string> obj;のように<>内に書かれているのは昔からあったテンプレート機能のようです。

  • 例えばゲームで武器と鎧が同じクラスの場合、 武器として使う場合は攻撃力変数は必要でも守備力変数は必要なく、 鎧として使う場合は守備力変数は必要でも攻撃力変数は必要ない...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん