カテゴリ: C++ 更新日: 2026/01/15

C++の型推論を完全解説!autoとdecltypeを初心者でも理解できるように説明

C++における型推論 (auto, decltype)
C++における型推論 (auto, decltype)

先生と生徒の会話形式で理解しよう

生徒

「C++のコードでautoって書いてあるのを見たんですが、型を書かなくていいんですか?」

先生

「autoは、コンピュータが変数の型を自動で考えてくれる仕組みです。」

生徒

「decltypeというのも見たことがあります。autoと何が違うんですか?」

先生

「型推論という考え方を知ると、その違いが分かります。順番に説明します。」

1. 型推論とは何か

1. 型推論とは何か
1. 型推論とは何か

C++の変数とデータ型では、通常、 intdoubleのように 変数の型を自分で書く必要があります。

しかし、毎回型を書くのは大変なこともあります。 そこで登場するのが型推論です。

型推論とは、「代入された値を見て、 コンピュータが変数の型を判断する仕組み」です。 人でいうと、見た目や中身から 何が入っているかを判断するイメージです。

C++では、型推論を行うために autodecltypeが用意されています。

2. autoの基本的な使い方

2. autoの基本的な使い方
2. autoの基本的な使い方

autoは、「ここは型を自動で決めてください」 という意味を持つキーワードです。

初心者の方は、 「intの代わりにautoを書ける」 と考えると分かりやすいでしょう。


#include <iostream>

int main() {
    auto number = 10;
    auto price = 3.5;
    std::cout << number << std::endl;
    std::cout << price << std::endl;
    return 0;
}

10
3.5

この例では、10は整数なのでnumberはint型、 3.5は小数なのでpriceはdouble型として 自動的に決められています。

autoは、値を見て型を決めるため、 必ず初期値を書く必要があります。

3. autoを使うメリット

3. autoを使うメリット
3. autoを使うメリット

autoを使う最大のメリットは、 コードが読みやすくなることです。

特に、型の名前が長い場合でも、 autoを使えばシンプルに書けます。

また、型を書き間違えるミスも減ります。 人が考えるよりも、 コンピュータの判断のほうが 正確な場面が多いからです。

ただし、何でもautoにすると、 どんな型なのか分かりにくくなることもあります。 そのため、使いどころを意識することが大切です。

4. decltypeとは何か

4. decltypeとは何か
4. decltypeとは何か

decltypeは、「指定したものと同じ型を使う」 という意味を持つ仕組みです。

decltypeは、 「この変数と同じ型を使いたい」 という場面で使われます。

名前は少し難しく見えますが、 「declare type(型を調べる)」 と考えるとイメージしやすくなります。


#include <iostream>

int main() {
    int base = 20;
    decltype(base) value = 30;
    std::cout << value << std::endl;
    return 0;
}

30

この例では、baseがint型なので、 valueも自動的にint型になります。

5. autoとdecltypeの違い

5. autoとdecltypeの違い
5. autoとdecltypeの違い

autoとdecltypeは、 どちらも型推論ですが、 考え方が少し違います。

autoは「代入される値」を見て型を決めます。 一方、decltypeは「指定した変数や式」を見て そのまま型を取得します。

例えるなら、 autoは中身を見て箱の大きさを決める方法、 decltypeは既にある箱と同じ箱を用意する方法です。

6. 初心者向けの使い分けの考え方

6. 初心者向けの使い分けの考え方
6. 初心者向けの使い分けの考え方

C++の変数とデータ型を学び始めた段階では、 まずはautoを使って、 型推論に慣れることがおすすめです。

decltypeは、 「この変数と同じ型を使いたい」 という明確な目的があるときに使うと、 コードの意味が分かりやすくなります。

autoとdecltypeを正しく理解することで、 C++のコードはより読みやすく、 安全なものになっていきます。

カテゴリの一覧へ
新着記事
New1
C++
C++の型推論を完全解説!autoとdecltypeを初心者でも理解できるように説明
New2
Rust
Rustの依存関係管理を完全ガイド!Cargoとクレートの仕組みを初心者向けに解説
New3
C言語
C言語のvolatileキーワードとは?組込み開発で欠かせない役割を解説
New4
C++
C++のconst変数とconstexprの違いを完全解説!初心者でもわかる定数の考え方
人気記事
No.1
Java&Spring記事人気No1
C言語
LinuxでC言語開発環境を構築する方法【GCCとMakefileの基本】
No.2
Java&Spring記事人気No2
C言語
C言語の静的変数staticを完全ガイド!初心者でもわかる仕組みと使い方
No.3
Java&Spring記事人気No3
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】
No.4
Java&Spring記事人気No4
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作
No.5
Java&Spring記事人気No5
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.6
Java&Spring記事人気No6
C++
CMakeの基本構文とCMakeLists.txtを初心者向けに解説
No.7
Java&Spring記事人気No7
C言語
C言語のテストコードを組み込む方法!UnityとCUnitで初心者でもわかる自動テスト
No.8
Java&Spring記事人気No8
C言語
C言語の配列と文字列の基本を完全ガイド!初心者でもわかる宣言と使い方