関連サイト
本書の関連ページが用意されています。
内容紹介
本書は、C++標準化委員会のメンバーでもある著者がC++11 のコア言語の文法と機能を標準規格書に従って解説したものです。C++プログラマーのために、数多くのサンプルコードを示しながら、冗長なほどの解説を加えています。 巻末の付録では、C++14についても言及しており、最新のC++について学ぼうとするプログラマーにとって最適の書籍となっています。
本書はC++11 のコア言語の文法と機能を標準規格書に従って解説したものである。正式なC++ 規格書として発行された後の、1 つ後のドラフト規格[N3337](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf)を参考にしている。ドラフト規格を参考にした理由は、正式なC++ 規格書は個人での入手が煩わしいためである。読者に入手が困難な資料を元に記述された参考書は価値がない。そのため、読者が容易に入手できるドラフト規格のうち、正式なC++ 規格書とほとんどかわらないN3337 を参考にした。
本書の対象読者は、C++ の利用者であって、C++ コンパイラーの実装者ではない。そのため、サンプルコードを増やし、冗長な解説を増やし、C++ コンパイラーを実装するための詳細な定義は省いた。そもそも本書はC++ 規格の翻訳ではないため、C++ 規格の検証に使うことはできない。
本書はまだC++11/14 の規格が正式に制定されていなかった2010 年から、当時のドラフト規格を元に書かれている。そのため、正式な規格や、特にC++14 における些細な変更は漏らしている可能性がある。また、近い将来に制定される予定のC++17 のドラフト文面に加えられた変更も反映していない。
(「はじめに」より)
書誌情報
- 著者: 江添亮
- 発行日: 2015-09-25 (紙書籍版発行日: 2015-09-25)
- 最終更新日: 2015-09-25
- バージョン: 1.0.0
- ページ数: 656ページ(PDF版換算)
- 対応フォーマット: PDF
- 出版社: アスキードワンゴ
対象読者
著者について
江添亮
Blog : http://cpplover.blogspot.jp/
GitHub: https://github.com/EzoeRyou/cpp-book
2010 年C++ 標準化委員会エキスパートメンバー
2014 年株式会社ドワンゴ入社
2015 年C++ 標準化委員会委員
目次
はじめに
筆者について
ライセンス
第1章 概要(General)
- 1.1 C++ とは
- 1.2 用語(Definition)
- 1.3 文法記法(Syntax notation)
- 1.4 C++ メモリーモデル(The C++ memory model)
- 1.5 C++ オブジェクトモデル(The C++ object model)
- 1.6 プログラムの実行(Program execution)
第2章 字句規約(Lexical convention)
- 2.1 翻訳単位(Separate translation)
- 2.2 ソースファイルの変換(Phase of translation)
- 2.3 文字セット(Character set)
- 2.4 トークン(Token)
- 2.5 コメント(Comment)
- 2.6 識別子(Identifier)
- 2.7 キーワード(Keyword)
- 2.8 リテラル(Literal)
第3章 基本事項(Basic concept)
- 3.1 宣言と定義(Declaration and definition)
- 3.2 ODR(One definition rule)
- 3.3 スコープ(Scope)
- 3.4 名前探索(Name lookup)
- 3.5 プログラムとリンケージ(Program and linkage)
- 3.6 プログラムの開始と終了(Start and termination)
- 3.7 ストレージ(storage duration)
- 3.8 オブジェクトの寿命(Object lifetime)
- 3.9 型(Type)
第4章 標準型変換(Standard conversion)
- 4.1 lvalue からrvalue への型変換(Lvalue-to-rvalue conversion)
- 4.2 配列からポインターへの型変換(Array-to-pointer conversion)
- 4.3 関数からポインターへの型変換(Function-to-pointer conversion)
- 4.4 CV 修飾子の型変換(Qualification conversion)
- 4.5 整数の変換順位(Integer conversion rank)
- 4.6 整数のプロモーション(Integral promotion)
- 4.7 整数の型変換(Integral conversion)
- 4.8 浮動小数点数のプロモーション(Floating point promotion)
- 4.9 浮動小数点数の型変換(Floating point conversion)
- 4.10 浮動小数点数と整数の間の型変換(Floating-integral conversion)
- 4.11 ポインターの型変換(Pointer conversion)
- 4.12 メンバーへのポインターの型変換(Pointer to member conversion)
- 4.13 bool の型変換(Boolean conversion)
第5章 式(Expression)
- 5.1 優先順位と評価順序.
- 5.2 未評価オペランド(unevaluated operand)
- 5.3 一次式(Primary expression)
- 5.4 ラムダ式(Lambda expression)
- 5.5 後置式(Postfix expression)
- 5.6 単項式(Unary expression)
- 5.7 キャスト形式による明示的型変換(Explicit type conversion (cast notation))
- 5.8 メンバーへのポインター演算子(Pointer-to-member operator)
- 5.9 乗除算の演算子(Multiplicative operator)
- 5.10 加減算の演算子(Additive operator)
- 5.11 シフト演算子(Shift operator)
- 5.12 関係演算子(Relational operator)
- 5.13 等価演算子(Equality operator)
- 5.14 ビット列論理積演算子(Bitwise AND operator)
- 5.15 ビット列排他的論理和演算子(Bitwise exclusive OR operator)
- 5.16 ビット列論理和演算子(Bitwise inclusive OR operator)
- 5.17 論理積演算子(Logical AND operator)
- 5.18 論理和演算子(Logical OR operator)
- 5.19 条件演算子(Conditional operator)
- 5.20 代入と複合代入演算子(Assignment and compound assignment operator)
- 5.21 コンマ演算子(Comma operator)
- 5.22 定数式(Constant expression)
第6章 文(Statement)
- 6.1 ラベル文(Labeled statement)
- 6.2 式文(Expression statement)
- 6.3 複合文、ブロック(Compound statement or block)
- 6.4 選択文(Selection statement)
- 6.5 繰り返し文(Iteration statement)
- 6.6 宣言文(Declaration statement)
- 6.7 曖昧解決(Ambiguity resolution)
第7章 宣言(Declaration)
- 7.1 単純宣言(simple-declaration)
- 7.2 static_assert 宣言(static_assert-declaration)
- 7.3 指定子(Specifier)
- 7.4 enum の宣言(Enumeration declaration)
- 7.5 名前空間(Namespace)
- 7.6 リンケージ指定(Linkage specification)
- 7.7 アトリビュート(Attribute)
第8章 宣言子(Declarator)
- 8.1 型名(Type name)
- 8.2 曖昧解決(Ambiguity resolution)
- 8.3 宣言子の意味(Meaning of declarator)
- 8.4 関数の定義(Function definition)
- 8.5 初期化子(Initializer)
第9章 クラス(Class)
- 9.1 トリビアルにコピー可能なクラス(trivially copyable class)
- 9.2 トリビアルクラス(trivial class)
- 9.3 標準レイアウトクラス(standard-layout class)
- 9.4 POD 構造体(POD struct)
- 9.5 クラス名(Class name)
- 9.6 クラスのメンバー(Class member)
- 9.7 メンバー関数(Member function)
- 9.8 static メンバー(Static member)
- 9.9 union
- 9.10 ビットフィールド(Bit-field)
- 9.11 クラス宣言のネスト(Nested class declaration)
- 9.12 ローカルクラス宣言(Local class declaration)
- 9.13 型名のネスト(Nested type name)
第10章 派生クラス(Derived class)
- 10.1 複数の基本クラス(Multiple base class)
- 10.2 メンバーの名前探索(Member name lookup)
- 10.3 virtual 関数(Virtual function)
- 10.4 アブストラクトクラス(Abstract class)
第11章 メンバーのアクセス指定(Member access control)
- 11.1 アクセス指定子(Access specifier)
- 11.2 基本クラスと、基本クラスのメンバーへのアクセス指定(Accessibility of base class and base class member)
- 11.3 friend
- 11.4 protected メンバーアクセス(Protected member access)
- 11.5 virtual 関数へのアクセス(Access to virtual function)
- 11.6 複数のアクセス(Multiple access)
- 11.7 ネストされたクラス(Nested class)
第12章 特別なメンバー関数(Special member function)
- 12.1 コンストラクター(Constructor)
- 12.2 一時オブジェクト(Temporary object)
- 12.3 型変換(Conversion)
- 12.4 デストラクター(Destructor)
- 12.5 フリーストア(Free store)
- 12.6 初期化(Initialization)
- 12.7 生成と破棄(Construction and destruction)
- 12.8 クラスのコピーとムーブ.
- 12.9 コンストラクター継承(Inheriting constructor)
第13章 オーバーロード(Overloading)
- 13.1 オーバーロード可能な宣言(Overloadable declaration)
- 13.2 オーバーロードのその他の注意事項.
- 13.3 オーバーロード解決(Overload resolution)
- 13.4 適切関数(Viable function)
- 13.5 最適関数(Best viable function)
- 13.6 オーバーロード関数のアドレス(Address of overloaded function)
- 13.7 オーバーロード演算子(Overloaded operator)
第14章 テンプレート(Template)
- 14.1 テンプレート仮引数/実引数(Template parameter/argument)
- 14.2 テンプレート特殊化の名前(Name of template specialization)
- 14.3 型の同一性(Type equivalence)
- 14.4 テンプレート宣言(Template declaration)
- 14.5 名前解決(Name Resolution)
- 14.6 テンプレートの実体化と特殊化(Template instantiation and specialization)
- 14.7 関数テンプレートの特殊化(Function template specialization)
第15章 例外(Exception handling)
- 15.1 例外を投げる(Throwing an exception)
- 15.2 コンストラクターとデストラクター(Constructor and destructor)
- 15.3 例外の捕捉(Handling an exception)
- 15.4 例外指定(Exception specification)
付録A C++14 の新機能
- A.1 2 進数リテラル(binary literal)
- A.2 桁区切り(digit separator)
- A.3 汎用lambda キャプチャー(Generalized Lambda-capture)
- A.4 ジェネリックlambda
- A.5 サイズつき解放関数
- A.6 constexpr 関数の制限緩和
- A.7 constexpr メンバー関数の暗黙のconst 廃止
- A.8 decltype(auto)
- A.9 戻り値の型推定
- A.10 [[deprecated]]
- A.11 メンバー初期化子とアグリゲート初期化の併用
- A.12 変数テンプレート(variable template)