はじめに
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です。