カテゴリ: 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++の値渡し(pass by value)とは?仕組みと使い方を初心者向けに徹底解説
New2
C++
C++とポインタ・参照の重要性をやさしく解説!初心者でも理解できる仕組みと使い方
New3
C++
GCCでC++開発を始める方法!初心者向け完全ガイド
New4
Rust
Rustの式(Expression)と文(Statement)の違いを徹底解説!初心者が迷うセミコロンの秘密
人気記事
No.1
Java&Spring記事人気No1
C言語
C言語を学ぶ初心者におすすめの環境構築手順【2025年版】
No.2
Java&Spring記事人気No2
C++
MinGWとMSYS2でWindowsにC++環境を構築する方法を徹底解説!初心者でもできるセットアップガイド
No.3
Java&Spring記事人気No3
C言語
LinuxでC言語開発環境を構築する方法【GCCとMakefileの基本】
No.4
Java&Spring記事人気No4
C言語
C言語のソースコードとヘッダファイルの役割とは?初心者向けにわかりやすく解説!
No.5
Java&Spring記事人気No5
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】
No.6
Java&Spring記事人気No6
C言語
C言語開発でよく使われるエディタとIDEランキング【初心者向け完全ガイド】
No.7
Java&Spring記事人気No7
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.8
Java&Spring記事人気No8
C++
CMakeの役割と導入方法をやさしく解説!C++開発環境構築ガイド