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