型推論に使用される C++ の auto キーワード

Suraj P 2023年10月12日
  1. C++ の auto キーワード
  2. C++ の関数で auto を使用する
  3. C++ の変数で auto を使用する
  4. C++ のイテレータで auto を使用する
  5. C++ の関数パラメータで auto を使用する
  6. C++ で auto キーワードを使用する際の間違い
  7. まとめ
型推論に使用される C++ の auto キーワード

このチュートリアルでは、C++ 11 で導入された auto キーワードに取り組みます。さまざまな例を見て、その使用例と、使用中に発生する一般的な間違いを理解します。

C++ の auto キーワード

C++ 11 バージョンのキーワード auto は、型推論機能の一部です。型推論とは、コンパイル時に関数または変数のデータ型を推測することを意味します。

したがって、コンパイラがコンパイル時に自動的に推測できるデータ型を指定する必要はありません。return ステートメントは、関数の戻りデータ型を推測するのに役立ちます。

一方、変数の場合、初期化はデータ型の決定に役立ちます。

C++ の関数で auto を使用する

#include <iostream>
using namespace std;

auto division() {
  double a = 55.0;
  double b = 6.0;
  double ans = a / b;
  return ans;
}

int main() { cout << division(); }

出力:

9.16667

ここで、return ステートメントは、コンパイラが division() 関数の戻り型を推測するのに役立ちます。関数は double 型の ans を返すため、コンパイラは auto を double に置き換える必要があると推測します。

C++ の変数で auto を使用する

#include <iostream>
#include <typeinfo>
using namespace std;

int main() {
  auto x = 10;
  auto y = 10.4;
  auto z = "iron man";

  cout << x << endl;
  cout << y << endl;
  cout << z << endl;
}

出力:

10
10.4
iron man

初期化子とも呼ばれるステートメントの右側に基づいて、コンパイラーは変数のタイプを推測します。

C++ のイテレータで auto を使用する

vector、set、map などの STL コンテナーを処理する場合、auto キーワードを使用してそれらを反復処理します。イテレータの長い宣言をスキップすることで、時間の損失を最小限に抑えることができます。

#include <bits/stdc++.h>
using namespace std;

int main() {
  vector<int> v{22, 14, 15, 16};

  vector<int>::iterator it = v.begin();  // without auto
  auto it2 = v.begin();

  while (it2 != v.end()) {
    cout << *it2 << " ";
    it2++;
  }
  cout << endl;

  map<int, int> mp;
  mp.insert(pair<int, int>(1, 40));
  mp.insert(pair<int, int>(2, 30));
  mp.insert(pair<int, int>(3, 60));
  mp.insert(pair<int, int>(4, 20));

  map<int, int>::iterator vt = mp.begin();  // without auto
  auto vt2 = mp.begin();

  while (vt2 != mp.end()) {
    cout << vt2->first << " -> " << vt2->second << endl;
    vt2++;
  }
  cout << endl;
}

出力:

22 14 15 16
1 -> 40
2 -> 30
3 -> 60
4 -> 20

auto を使用する場合と使用しない場合の違いを確認します。auto がないと、イテレータのタイプを明示的に指定する必要があります。これは、ステートメントが非常に長いため、面倒です。

C++ の関数パラメータで auto を使用する

C++ では、毎回関数パラメーターを指定する必要がありますが、これは auto を使用することで簡略化できます。

#include <bits/stdc++.h>
using namespace std;

void myfunc(auto x, auto str) { cout << x << " " << str << endl; }

int main() {
  int x = 10;
  string str = "Iron Man";
  myfunc(x, str);
}

出力:

10 Iron Man

データ型の推定は、関数呼び出し中に行われます。その結果、変数の一致が発生し、コンパイラーはすべての引数の正確なデータ型を把握します。

C++ で auto キーワードを使用する際の間違い

整数とブールの混同

C++ では、ブール値が 0 または 1 として初期化されることがわかっています。さて、これはデバッグ中に混乱を引き起こす可能性があります。

#include <bits/stdc++.h>
using namespace std;

int main() { auto temp = 0; }

auto キーワードを使用した複数の宣言

時間を節約するために一度に変数を宣言しますが、両方が異なるタイプの場合、これにより問題が発生する可能性があります。

#include <bits/stdc++.h>
using namespace std;

int main() { auto x = 10, y = 35.66; }

出力:

[Error] inconsistent deduction for 'auto': 'int' and then 'double'

上記のコードをコンパイラーでコンパイルすると、エラーが発生します。これは、コンパイラーが混乱するために発生します。

まとめ

auto キーワードは、プログラムのより集中的で複雑な部分に焦点を当てて、基本的なコードを書くのに費やす時間を大幅に節約できることを理解しました。非常に便利ですが、使用方法には注意が必要です。

著者: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub