C++の型推論とは?autoキーワードによる自動型推論をわかりやすく解説
型推論(Type Inference / Type Deduction)とは、プログラミング言語において、式のデータ型をコンパイラが自動的に判別する機能のことです。この機能は、一部の強い静的型付け言語に備わっており、C++ではautoキーワード(C++11で追加)を使うことで自動的な型推論が可能になります。
autoキーワードの基本
C++11以降では、変数宣言時に初期化子から型を推論させることができます。これにより、特に複雑な型を扱う際にコードが簡潔になり、可読性も向上します。
例えば、vectorを走査するイテレータを作成したい場合、従来は std::vector<int>::iterator という長い型名を明示的に書く必要がありましたが、auto を使えばその手間がなくなります。
コード例
#include<iostream>
#include<vector>
using namespace std;
int main() {
vector<int> arr(10);
for(auto it = arr.begin(); it != arr.end(); ++it) {
cin >> *it;
}
return 0;
}
上記のプログラムでは、変数 it の型はコンパイラによって自動的に std::vector<int>::iterator と推論されます。開発者が明示的に型名を記述する必要はありません。
型推論のメリット
- コードの簡潔さ: 長く複雑な型名(テンプレート関連の型など)を書かずに済みます。
- 保守性の向上: 型の変更があっても、宣言部分を修正する必要が減ります。
- タイポの防止: 型名を手動で書き間違えるリスクが低くなります。
注意点
autoは便利な一方、推論された型が意図しないものになる場合もあります。例えば、auto x = 3.14; は double として推論されます。また、参照やconst修飾子の扱いにも注意が必要です。必要に応じて decltype や const auto& などを組み合わせると、より正確な型制御が可能になります。
-
C++でユニークな分数リストを作成する方法:約分・重複削除・昇順ソート
問題概要 [分子, 分母](分子 / 分母)というペアからなる分数のリストが与えられます。このリストをもとに、次の条件をすべて満たす新しい分数リストを作成するのが課題です。 既約形にする:各分数をこれ以上約分できない形まで簡略化します。(例:20/14 → 10/7) 重複を削除する:約分した結果が同一になる分数は1つだけ残します。 昇順にソートする:分数の実際の値に基づいて小さい順に並べます。 符号の扱い:負の分数の場合、「-」の記号は必ず分子側に付けます。 たとえば、入力が {{16, 8}, {4, 2}, {7, 3}, {14, 6}, {20, 4}, {-6, 12}} の場
-
C/C++の型キャストとは?基礎から整数昇格・通常の算術型変換まで解説
型キャスト(型変換)とは、あるデータ型の変数を別のデータ型へ変換する手法のことです。例えば、long型の値を単純なint型の変数に格納したい場合、longをintへキャストすることができます。値をある型から別の型へ明示的に変換するには、キャスト演算子を次の形式で使用します。(型名) 式キャスト演算子の使用例次の例では、キャスト演算子によって整数変数同士の除算が浮動小数点演算として実行されます。#include <stdio.h> main() { int sum = 17, count = 5; double mean; mean = (double) su