コンテンツにスキップ

C++/記法

出典: フリー教科書『ウィキブックス(Wikibooks)』
< C++


C++は柔軟性が高く、高度な機能を備えたプログラミング言語です。以下に、基本的な構文と機能をいくつか挙げてみます:

変数とデータ型
変数を宣言するときは、そのデータ型を指定します。例えば、intは整数型を表し、doubleは倍精度浮動小数点数型を表します。
int age{30};
double pi{3.14};
制御構造
制御構造には、条件分岐と繰り返しが含まれます。ifelseを使用して条件分岐を作成し、forwhiledo whileを使用して繰り返しを行います。
if (age >= 18) {
    cout << "You are an adult." << endl;
} else {
    cout << "You are a minor." << endl;
}

for (int i = 0; i < 5; i++) {
    cout << i << endl;
}
関数
C++では関数を定義して再利用可能なコードを作成できます。
auto add(int a, int b) -> int {
    return a + b;
}
クラスとオブジェクト指向プログラミング
C++はオブジェクト指向プログラミング言語です。クラスを使用してデータと関数をまとめ、オブジェクトを作成します。
class Circle {
 private:
    double radius;
 public:
    Circle(double r) : radius(r) {}
    double area() {
        return 3.14 * radius * radius;
    }
};

Circle myCircle(5);
cout << "Area of the circle: " << myCircle.area() << endl;
ポインタと参照
C++ではポインタと参照を使用して、メモリの管理や関数への効率的な引数の渡し方を行います。
int x{10};
int* ptr{&x}; // ポインタの宣言と参照の取得
int& ref{x};  // 参照の宣言

*ptr = 20;     // ポインタを通じた値の変更
ref = 30;      // 参照を通じた値の変更

cout << x;     // 出力: 30

これらはC++の基本的な機能の一部ですが、C++の言語仕様や機能は非常に広範囲にわたります。

変数を初期化するための3つの方法
C++には、変数を初期化するための複数の方法があります。それぞれの方法には特徴と用途があります。以下に、3つの異なる初期化方法とそれぞれの詳細を解説します。
  1. コピー初期化
    C言語と同じ初期化方法。よく代入と間違われる。
    int age = 30;
    double pi = 3.14;
    
    説明
    コピー初期化は、変数に値を代入するように見える初期化方法です。等号 (=) を使用します。
    コンパイラは右辺の値を左辺の変数にコピーします。
    特徴
    一般的に使われるシンプルな初期化方法。
    暗黙の型変換が行われる場合があります。例えば、int 型の変数に double の値を代入すると、小数点以下が切り捨てられます。
  2. 直接初期化
    初期のC++の初期化方法。
    int age(30);
    double pi(3.14);
    
    説明
    直接初期化は、コンストラクタ呼び出しのような形で初期化する方法です。
    括弧 (()) を使用して、変数を初期化します。
    特徴
    コピー初期化と同様に動作しますが、コンストラクタを使った初期化に似ています。
    コピー初期化と同じく、暗黙の型変換が行われる場合があります。
  3. 統一初期化 (ブレース初期化)
    int age{30};
    double pi{3.14};
    
    説明
    統一初期化は、C++11で導入された新しい初期化方法です。
    中括弧 ({}) を使用して初期化します。
    特徴
    型安全です。暗黙の型変換が行われず、明示的にキャストしない限り、異なる型への変換はコンパイルエラーとなります。
    配列や構造体のメンバーなど、複数のメンバーを一度に初期化することができます。
    初期化リストを使用することで、初期化の意図が明確になります。
    例外および注意点
    統一初期化は初期化のための最も厳格で安全な方法とされています。例えば、以下のような場合にコンパイルエラーが発生します。
    int value1 = 3.14;  // OK: value1 is initialized to 3 (truncation occurs)
    int value2{3.14};  // Error: narrowing conversion from 'double' to 'int'
    
    このため、統一初期化は暗黙の型変換による不具合を防ぐのに役立ちます。
    コピー初期化や直接初期化は依然として有効であり、特にライブラリコードや既存のコードベースでよく見られます。
結論

各初期化方法にはその場面や用途に応じた利点があります。新しいコードを書く際には、統一初期化を使用することが推奨されますが、既存のコードや特定の状況ではコピー初期化や直接初期化も有用です。それぞれの方法を理解し、適切に使い分けることが重要です。