C++で変数を宣言するには、「型 変数名 = 初期値;」のように、データの種類を表す「型」と「変数名」を書きます。たとえば整数を入れる変数なら int x = 5; のように書き、これで x という名前の整数変数が値 5 で使えるようになります。
| この記事の要点 |
|---|
|
基本の書き方
C++では、変数を使う前に「どんな種類のデータを入れるか」を表す型とともに宣言します。もっとも基本的な形は次のとおりです。
|
型 変数名 = 初期値; |
たとえば、整数を入れる変数 x を 5 という値で宣言するには次のように書きます。宣言と同時に初期値を与えることを初期化と呼びます。
|
#include <iostream> int main() { int x = 5; std::cout << x << std::endl; return 0; } |
|
5 |
初期値を省略して int x; とだけ書くこともできますが、その場合の値は定まりません(後述の「落とし穴」を参照)。原則として、宣言と同時に初期化することをおすすめします。
主な型
変数の型によって、入れられる値の種類や扱える範囲が変わります。C++でよく使う基本的な型は次のとおりです。
| 型 | 扱うデータ | 宣言の例 |
|---|---|---|
int |
整数 | int n = 10; |
double |
小数(実数) | double pi = 3.14; |
char |
1文字 | char c = 'A'; |
bool |
真偽(true / false) | bool ok = true; |
std::string |
文字列 | std::string s = "hello"; |
char は 'A' のようにシングルクォートで1文字を、std::string は "hello" のようにダブルクォートで文字列を表します。std::string を使うには #include <string> が必要です。
初期化の書き方
C++では初期値の与え方が複数あります。次の3つはいずれも、値 5 で int 型の変数 x を初期化します。
|
int x = 5; // 代入の形(もっとも基本) int x{5}; // 統一初期化(波かっこ) int x(5); // かっこによる初期化 |
このうち波かっこ {} を使う書き方を統一初期化(リスト初期化)と呼びます。さまざまな型で同じ書き方が使えるうえ、値が型に収まらない場合(たとえば小数を整数に詰めるなど)に警告やエラーになりやすく、意図しない値の切り捨てを防ぎやすいという利点があります。新しく書くコードでは {} を用いる書き方が推奨されることが多いです。
auto による型推論
型のところに auto と書くと、コンパイラが初期値から型を自動的に判断します。これを型推論と呼びます。次の2つは同じ意味です。
|
auto x = 5; // int と推論される auto pi = 3.14; // double と推論される auto s = std::string("hi"); // std::string |
auto は型名が長くなりがちな場面でコードを簡潔にできますが、初期値が必須です。初期値がなければ型を決められないため、auto x; はエラーになります。何の型になるか読み手に伝わりにくくなる場合もあるので、わかりやすさとのバランスで使い分けます。
const による定数
宣言時に const を付けると、その変数はあとから値を変更できない「定数」になります。設定値や円周率のように、書き換えてはいけない値に使うと安全です。
|
const int MAX = 100; // MAX = 200; ← エラー(変更できない) |
定数の宣言については、定数の宣言でより詳しく解説しています。
変数のスコープ(有効範囲)
変数には、その変数が使える範囲であるスコープがあります。波かっこ { } の中で宣言した変数は、その中だけで有効なローカル変数になり、かっこを抜けると使えなくなります。一方、関数の外で宣言した変数はグローバル変数となり、プログラム全体から参照できます。
|
#include <iostream> int g = 100; // グローバル変数 int main() { int local = 5; // ローカル変数(main の中だけ) std::cout << g + local << std::endl; return 0; } |
|
105 |
グローバル変数はどこからでも書き換えられるため、どこで値が変わったか追いにくくなりがちです。基本的には必要な範囲だけで使えるローカル変数を優先し、グローバル変数は最小限にとどめるとよいでしょう。
よくある落とし穴
| 落とし穴 | 説明 |
|---|---|
| 未初期化変数の不定値 | int x; のように初期化せずに宣言したローカル変数の値は定まりません(不定値)。その値を読むと結果が予測できないため、必ず初期化してから使います。 |
| 暗黙の型変換 | int n = 3.9; のように小数を int に入れると、小数部が切り捨てられて 3 になります。意図しない値になりやすい点に注意します。統一初期化 int n{3.9}; なら警告やエラーになりやすく、ミスに気づけます。 |
| シャドーイング(変数の隠れ) | 内側のスコープで外側と同じ名前の変数を宣言すると、内側ではそちらが優先され、外側の変数が一時的に見えなくなります。どちらを指しているか紛らわしいバグの原因になります。 |
シャドーイングの例を示します。同じ x という名前でも、内側の波かっこの中では新しく宣言した方が使われます。
|
#include <iostream> int main() { int x = 1; { int x = 2; // 外側の x を隠す std::cout << x << std::endl; // 2 } std::cout << x << std::endl; // 1 return 0; } |
よくある質問(FAQ)
Q. 宣言と初期化は何が違いますか?
A. 宣言は「この名前でこの型の変数を使う」とコンパイラに伝えることです。初期化は宣言と同時に最初の値を与えることを指します。int x; は宣言のみ、int x = 5; は宣言と初期化を同時に行っています。値が定まらない事故を避けるため、宣言と同時に初期化するのが基本です。
Q. int x = 5; と int x{5}; はどちらを使うべきですか?
A. どちらも結果は同じ整数変数になります。波かっこ {} を使う統一初期化は、値が型に収まらない場合に警告やエラーになりやすく、意図しない切り捨てを防ぎやすい利点があります。新しいコードでは {} を選ぶとより安全です。
Q. auto はいつ使えばよいですか?
A. 初期値から型が明らかな場合や、型名が長くて記述が冗長になる場合に便利です。ただし auto は初期値が必須で、読み手に型が伝わりにくくなることもあるため、可読性とのバランスで使い分けます。
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38