SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Modern C++入門

かつての当たり前が通用しない? Modern C++ではやらないこと

第1回 newもdeleteも呼ばないで!

  • このエントリーをはてなブックマークに追加

 21世紀に入ってまったく別物と言えるプログラミング言語に進化したC++。本連載では、Modern C++と称されるC++について、Modern C++らしい言語仕様をピックアップし紹介していきます。第1回は、かつてのC++の当たり前が今では通用しないことを紹介します。たとえばインスタンスの生成にnewを、破棄にdeleteをというのが常道でしたが、もはやそれらは非推奨なのです。導入として、このようなかつては常識だったことが非推奨になっているという状況を、いくつかのトピックスを通じてお話しします。

  • このエントリーをはてなブックマークに追加

はじめに

 C言語から派生したオブジェクト指向プログラミング言語であるC++は、21世紀に入ってまったく別物とも言えるプログラミング言語に成長していきました。それは、Modern C++と称されています。1990年代にC++を触っていたプログラマが現在の仕様を知れば、隔世感に苛まれるのではないでしょうか。本連載では、かつてはC++をたしなんでいたという方、今からC++言語を始めるという方に向けて、Modern C++らしい言語仕様をピックアップし紹介していくことで、今のC++言語の姿を理解していただきます。

対象読者

  • かつてはC++をたしなんでいたという方
  • 今からC++言語を始めるという方
  • モダンなプログラミング言語のパラダイムに興味のある方

必要な環境

 本記事のサンプルコードは、以下の環境で動作を確認しています。

  • macOS Monterey/Windows 10(64bit)
    • Xcode Command Line Tools 2395
    • MinGW GCC 9.2.0

Modern C++とは?

 今回の連載のテーマであるModern C++とは何でしょうか? 実は、Modern C++というものは厳密には存在しません。プログラミング言語C++の、あるバージョン以降をそのように呼んでいます。

C++の誕生と成長

 Modern C++を語るのに、やはりC++は外せません。ですので、まずはC++の歴史を振り返ってみましょう。時代は1970年代終盤にまでさかのぼります。筆者が高校生になったくらいでしょうか。身近に使えるコンピュータといえば、8bit CPUを搭載したワンボードマイコンという時代です。しかし、そのころにはC言語はとっくに実用化されていて、C++誕生への動きが始まろうとしていました。

 1979年に、クラス付きC言語という意味の、「C with Classes」の開発がアメリカのAT&Tで始まりました。クラスとはオブジェクト指向のパラダイムに欠かせない概念ですが、オブジェクト指向の考え方自体は1960年代から1970年代にかけて登場したもので、これをC言語にも取り入れようという動きだったのではないかと思われます。このC with Classesは、1983年には「C++」に名称が変更されます。これが、現在のC++の原点と言えます。C++という名称には、C言語のインクリメント演算子の「++」にあやかって、「一歩進んだ」といったニュアンスが含まれていると言われています(諸説あります)。

 1990年代以前に登場した古めのプログラミング言語にありがちな状況として、何が公式な仕様なのかがわからないという状況がC++にもありました。C言語には、開発者であるカーニハンとリッチーによる「Programming Language C」(国内では「プログラミング言語C」)が事実上の標準という時期が長かったのですが、C++では「The C++ Programming Language」(国内では「プログラミング言語C++」)という書籍が事実上の標準となりました。

 1989年にはバージョン2.0がリリースされ、重要な仕様である多重継承、抽象クラス、protectedメンバなどが導入されました。そうして、いよいよ標準化のときがやってきます。C++は、1998年にISO/IEC 14882:1998として承認されました。その後、いくつかの改訂版を経て2011年にISO/IEC 14882:2011、通称「C++11」として策定されます。このバージョンが、Modern C++の始まりです。

 その後さらに、2014年にはISO/IEC 14882:2014、通称「C++14」が策定されました。さらに、2017年にはISO/IEC 14882:2017、通称「C++17」が策定、2020年にはISO/IEC 14882:2020、通称「C++20」が策定されました。

 現在、この3バージョンを総じてModern C++と称しています。本稿も、これに合わせてこの3バージョンをModern C++として扱い、その仕様を紹介していきます。

Modern C++はどこで使えるのか?

 本連載では、Modern C++ならではの言語仕様に踏み込んでいきます。もちろん、サンプルプログラムを作りながらということになりますので、動かして試せる環境が欲しいですね。サンプルの内容はコンソール入出力を扱うだけのベーシックなものなので、テキストエディタとコンパイラがあれば、基本的にOKです。そこで、テキストエディタにはVSCode(Visual Studio Code)を、コンパイラにはOS(プラットフォーム)ごとに用意されたもの、この組み合わせを推奨します。

 Microsoft Visual Studio Communityをインストールすれば、macOSとWindowsにかかわらずModern C++のプログラミングが可能ですが、本格的な開発のための環境であるゆえ要求されるリソースも大きく、機能が多いので使いこなしも大変です。ここは、軽量な手段を選ぶことにしましょう。

 VSCodeが入っていない! という人は、以下のリンクからダウンロードするか、あるいはCodeZineの連載を参照してください。macOSとWindowsの双方についてのダウンロードとインストール手順が書いてあります。

 コンパイラは、macOSとWindowsでインストール方法が異なります。macOSの場合、Xcodeに付属するCommand Line Toolsをインストールするのが簡単です。ターミナルを開いて、xcode-selectコマンドを実行します。これで、Cコンパイラをはじめとする各種のツールがmacOS上で利用可能になります。gcc --versionコマンドを実行して、以下のように情報が表示されればOKです。

% xcode-select --install
% gcc --version
Apple clang version 12.0.5 (clang-1205.0.22.9)
Target: x86_64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

 Windowsの場合、MinGWというツールをダウンロードしてインストールするのがもっとも簡単です。

 インストールが終了すると、MinGW Installation Managerというツールが使用可能になるので、起動して「mingw32-base」と「mingw32-gcc-g++」を有効にしてください。これで、C++のコンパイラが使用可能になりますので、「MinGWのインストールフォルダ\bin」を環境変数PATHに追加すれば、コマンド名のみの実行が可能になります。gcc --versionコマンドを実行して、情報が表示されればOKです。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
あの頃のC++と、もはややらないこと

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Modern C++入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook <個人紹介> WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLDB/PEAR/Smarty)」「独習シリーズ(ASP.NET/PHP)」「10日でおぼえる入門教室シリーズ(ASP.NET/PHP/Jakarta/JSP&サーブレット/XML)」「Pocket詳解辞典シリーズ(ASP.NET/PHP/Perl&CGI)」「今日からつかえるシリーズ(PHP/JSP&サーブレット/XML/ASP)」「書き込み式 SQLのドリル」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/16769 2022/12/01 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング