C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++の自動ストレージクラス(auto)とは?基本と意味の変遷を解説

C言語において、autoストレージクラス指定子は、自動記憶域期間(automatic storage duration)を持つ変数を明示的に宣言するためのキーワードです。ブロック内で宣言された変数には、autoがデフォルトのストレージクラスとして適用されます。自動ストレージを持つ変数は、その変数が宣言されたブロックを抜ける時点で破棄されるという特徴があります。

auto指定子を適用できる対象

autoストレージクラス指定子を適用できるのは、ブロック内で宣言された変数名、または関数の仮引数名に限られます。しかし、これらの名前はもともとデフォルトで自動ストレージを持っているため、データ宣言の場面ではautoストレージクラス指定子を付けても通常は冗長であり、実質的な意味を持ちません。

C++におけるautoの意味の変遷

autoキーワードは、当初は単なる構文上の互換性を保つ目的でC++に引き継がれました。そのため、C++でも従来どおりのストレージクラス指定子として存在していましたが、実際に使われることはほとんどありませんでした。

ところが、C++11においてautoは大きく生まれ変わります。「自動型推論(automatic type deduction)」という独自の意味が与えられたのです。たとえば auto x = 42; と記述すれば、コンパイラが初期化子から x の型を int と自動的に推論します。これにより、イテレータやテンプレート関連など複雑な型名を明示的に書く必要がなくなり、コードの可読性と保守性が大幅に向上しました。

まとめ

旧来のautoストレージクラス指定子は、デフォルト動作を明示するだけの冗長なキーワードでしたが、モダンC++(C++11以降)では型推論の中核を担う重要な機能へと役割が変わりました。古いC/C++のコードを読む際は文脈に注意し、どちらの意味のautoなのかを見分けることが大切です。

  1. C++で解く「迷路 II」問題 ― 壁に当たるまで転がるボールの最短距離をBFSで求める

    問題概要 空きマスと壁からなる迷路の中にボールがあります。ボールは上・下・左・右のいずれかの方向に転がって空きマスを進むことができますが、壁にぶつかるまで止まることはできません。ボールが停止したときに、初めて次の方向を選ぶことができます。 ボールのスタート位置、目的地、そして迷路そのものが与えられるので、ボールが目的地で停止するまでの最短距離を求めてください。ここでの距離とは、ボールが転がって通過した空きマスの数のことです(スタート位置は含まず、目的地は含みます)。どうしても目的地で停止できない場合は -1 を返します。 迷路は2次元配列で表現されます。1 が壁、0 が空きスペースを意味し、迷

  2. C++で解く迷路問題:転がるボールが目的地に止まれるかをBFSで判定する方法

    迷路の中にボールがあるとします。迷路には空きスペース(通路)と壁があります。ボールは上下左右のいずれかの方向に転がって空き通路を進むことができますが、壁にぶつかるまで止まりません。ボールが停止したときに、次の方向を選べます。この問題では、ボールの開始位置、目的地、そして迷路そのものが与えられ、「ボールが目的地の位置で停止できるかどうか」を判定する必要があります。迷路は2次元配列で表現され、1は壁、0は空きスペースを意味します。迷路の外周はすべて壁になっています。開始位置と目的地は行・列のインデックス(座標)で与えられます。問題例たとえば、次のような2次元配列で表される迷路を考えてみましょう。0