C++のキーワードと演算子の詳細

ポインタと参照

基本定義

  • ポインタ: オブジェクトのアドレスを格納する変数。自身のメモリアドレスを持つ。
  • 参照: 変数の別名。宣言時に初期化必須。

相違点

特性ポインタ参照
多重間接参照サポート (例: int**)単一参照のみ
null許容NULL/nullptr可不可
初期化宣言と初期化を分離可宣言時必須
再代入対象変更可不可
sizeof演算ポインタサイズを返す(4/8byte)参照先サイズを返す
引数渡しアドレス値のコピーエイリアス渡し

実装例

int value = 10;
int* ptr_val = &value;  // ポインタ
int& ref_val = value;   // 参照
*ptr_val = 20;         // ポインタ経由で変更
ref_val = 30;          // 参照経由で変更
ptr_val = nullptr;     // ポインタはnull可能

const修飾子

基本動作

  • const変数は読み取り専用。定義時初期化必須
  • データ保護と誤変更防止

定数ポインタ(下位const)

int data = 10;
const int* cptr = &data;  // 定数ポインタ
// cptr = 9;  // エラー: 値変更不可
data = 9;     // 直接変更は可能

ポインタ定数(上位const)

int data = 10;
int* const const_ptr = &data;
// const_ptr = &new_data; // エラー: ポインタ変更不可
*const_ptr = 9;         // 値変更は可能

#defineとtypedef

#defineマクロ

#define CIRCLE_RATIO 3.14159
#define MAX_VAL(a, b) ((a) > (b) ? (a) : (b))

typedef型定義

typedef unsigned int UINT;
typedef struct { int x; int y; } Coord;

比較

特性#definetypedef
処理段階プリプロセスコンパイル
型検査無し有り
スコープファイル単位通常スコープ

#defineとinline

#define SQUARE(x) (x) * (x)  // マクロ
inline int sqr(int x) { return x * x; }  // インライン関数

overrideとoverload

特性overrideoverload
多態性実行時多態コンパイル時多態
スコープ継承関係同一スコープ

newとmalloc

特性new/deletemalloc/free
メモリ確保型サイズ自動計算明示的サイズ指定
コンストラクタ自動呼び出し呼び出さない

constexprとconst

constexpr int MAX_LEN = 100;  // コンパイル時定数
const int dyn_val = getValue();  // 実行時定数

volatile

volatile int sensor_data;  // 最適化無効化

extern

extern int global_count;  // 外部変数宣言

static

class Counter {
  static int total;  // クラス共有変数
};
int Counter::total = 0;

タグ: C++ ポインタ 参照 const define

5月20日 12:36 投稿