C++/キーワード
キーワード
編集C++のキーワードは次のとおりです[1]。
alignas alignof asm auto bool break case catch char char8_t char16_t char32_t class concept const consteval constexpr constinit const_cast continue co_await co_return co_yield decltype default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new noexcept nullptr operator private protected public register reinterpret_cast requires return short signed sizeof static static_assert static_cast struct switch template this thread_local throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while
C++のキーワード一覧表 キーワード 用途 alignas alignas(alignment)
でアライメントを指定するalignas(type)
で型のアライメントを指定するalignof alignof(type)
で型のアライメント値を取得するasm asm(assembly-instruction)
でインラインアセンブリを挿入するauto auto x{value};
で型を自動推論するauto &x = ref;
で参照型を推論するauto add(int a, int b) -> int { return a + b; }
で関数を後置戻値型宣言するbool bool x{true};
で真理値型を定義するbreak break;
でスイッチ文やループから抜けるcase case value: statement;
でスイッチ文のケースを記述するcatch try { /* code */ } catch(Exception e) { /* handler */ }
で例外をキャッチするchar char c{'a'};
で文字型を定義するchar8_t char8_t c8{u8'a'};
でUTF-8文字型を定義するchar16_t char16_t c16{u'a'};
でUTF-16文字型を定義するchar32_t char32_t c32{U'a'};
でUTF-32文字型を定義するclass class C { /* members */ };
でクラスを定義するconcept concept C = /* constraint */ ;
でコンセプトを定義するconst const int x{1};
で値の不変を指定するint const x{1};
でも同様const int* p = &a;
でpが指す値は変更不可int* const q = &b;
でq自体は変更不可だが、指す値は変更可能const int* const r = &a;
でr自体も指す値も変更不可でgetValue()は、オブジェクトの状態を変更しないことを指定class MyClass { int value; public: int getValue() const { return value; } };
const auto n = 10;
で不変性のあるオブジェクトを型推論C++11 ⇒ autoinline const int k_global = 100;
で複数の翻訳単位で一意になることを指定C++17 ⇒ inlineconsteval consteval int f() { /* ... */ }
で定数評価関数を定義するconstexpr constexpr int square(int x) { return x * x; }
でコンパイル時に評価される定数式を定義(この時点では return 式; にだけ対応)C++11でより複雑な定数式を定義C++14,C++17constexpr int factorial(int n) { int result = 1; for (int i = 1; i <= n; ++i) { result *= i; } return result; }
でテンプレートの実体化の条件付き抑制C++17if constexpr (condition) { // statment1 } else { // statment2 }
で例外を上げる定数式を定義C++20constexpr int get_value(bool condition) { if (condition) { return 42; } else { throw std::runtime_error("Condition is false"); } }
constinit constinit int x{f()};
でデータ初期化に定数式評価を強制するconst_cast const_cast<int*>(p)
でconst修飾を除去するキャストcontinue continue;
で現在の反復を打ち切り、次の反復に移るco_await co_await expr;
でコルーチンを一時停止するco_return co_return expr;
でコルーチンから値を返すco_yield co_yield expr;
でコルーチンから値を生成するdecltype decltype(expr) x{expr};
で式の型を推論するdefault default: statement;
でスイッチ文のデフォルトケースを記述するdelete delete p;
でヒープ領域のオブジェクトを解放するdelete[] arr;
で配列を解放するdo do { /* loop body */ } while (condition);
でdo-while文を記述するdouble double x{3.14};
で倍精度浮動小数点型を定義するdynamic_cast dynamic_cast<Type*>(p)
で安全なダウンキャストを行うelse if (cond) { /* true case */ } else { /* false case */ }
でif文の否定節を記述するenum enum E { A, B, C };
で列挙型を定義するenum class E : int { A, B, C };
でスコープ付き列挙型を定義するexplicit explicit C(args);
で暗黙の型変換コンストラクタを禁止するexport export module M;
でモジュールエクスポートブロックを開始するextern extern int x;
で外部リンケージを指定するfalse bool x{false};
で偽の真理値リテラルを使うfloat float x{3.14f};
で単精度浮動小数点型を定義するfor for (init; cond; iter) { /* loop body */ }
でfor文を記述するfriend friend int f(C&);
でクラスのフレンド関数を宣言するfriend class D;
でフレンドクラスを宣言するgoto goto label; /* ... */ label:
で無条件ジャンプを行うif if (cond) { /* true case */ }
で条件分岐を行うif (cond) { /* true */ } else { /* false */ }
で条件分岐+否定節inline inline f() { /* ... */ }
でインライン関数を指定するinline int x;
でインライン変数を指定するint int x{42};
で整数型を定義するlong long x{42L};
でlong整数型を定義するmutable mutable int x;
でconstオブジェクト内での変更を許可するnamespace namespace N { /* ... */ }
で名前空間を定義するnamespace { /* ... */ }
で無名名前空間を定義するnew int* p{new int};
でヒープ領域にオブジェクトを動的に確保するint* arr{new int[10]};
で配列を動的に確保するnoexcept noexcept(true)
で関数が例外を送出しないことを指定するnoexcept(false)
で関数が例外を送出する可能性があることを指定するnullptr int* p{nullptr};
でヌルポインタリテラルを使うoperator operator+(A, B) { /* ... */ }
で演算子をオーバーロードするprivate private: /* ... */
でクラスのプライベートメンバーを定義するprotected protected: /* ... */
でクラスの保護メンバーを定義するpublic public: /* ... */
でクラスのパブリックメンバーを定義するregister register int x;
で変数をレジスタに配置することを提案する (C++11で非推奨、C++17で廃止)reinterpret_cast reinterpret_cast<int*>(p)
でリンタープリットキャストを行うrequires template<typename T> requires C<T> /* ... */
でコンセプト制約を指定するreturn return expr;
で関数から値を返すshort short x{42};
でshort整数型を定義するsigned signed int x{42};
で符号付き整数型を定義するsizeof sizeof(type)
で型のサイズを取得するsizeof expr
で式の結果の型のサイズを取得するstatic static int x;
でファイル内での静的ストレージ期間を指定するstatic int C::x;
でクラスデータメンバーの定義を行うstatic int f();
で内部リンケージ関数を宣言するstatic_assert static_assert(cond, msg);
でコンパイル時アサートを行うstatic_cast static_cast<int>(x)
で安全な暗黙的な型変換を行うstruct struct S { /* members */ };
で構造体を定義するswitch switch (expr) { /* cases */ }
でスイッチ文を記述するtemplate template<typename T> struct X { /* ... */ };
でテンプレートを定義するthis this->x = y;
でメンバーアクセスの際にオブジェクト自身を参照するthread_local thread_local int x;
でスレッドローカルストレージを指定するthrow throw ex;
で例外を送出するtrue bool x{true};
で真の真理値リテラルを使うtry try { /* code */ } catch (...) { /* handler */ }
で例外処理ブロックを記述するtypedef typedef int Integer;
で型エイリアスを定義する (非推奨)typeid typeid(x)
で実行時型情報を取得するtypename typename T::x
でネストした名前がTypeであることを明示するunion union U { /* members */ };
で共用体を定義するunsigned unsigned int x{42U};
で無符号整数型を定義するusing using Integer = int;
で型エイリアスを定義するusing namespace N;
で名前空間からインポートするvirtual virtual void f();
で仮想関数を宣言するclass B : virtual public A { /* ... */ };
で仮想基底クラスを指定するvoid void f() { /* ... */ }
で戻り値のない関数を定義するvoid* p{nullptr};
で無型のポインタ型を定義するvolatile volatile int x;
で最適化に反する変数の読み書きを指定するwchar_t wchar_t c{L'a'};
でワイド文字型を定義するwhile while (cond) { /* loop body */ }
でwhile文を記述する
これに加え、モジュールに関する export import module も構文要素 keyword: の一部を構成する。
演算子の代替表現もキーワードに準じた扱いとなります[1]。 and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq