はじめに
C++を好きでちょこちょこプログラミングしており、ゆるやかに上達しています。
最初は意義がわからなかったauto
について、使いたくなった理由を書きます。
auto
って?
型を推定してくれるヤツ
なんでauto
を使うの?
コードが短くなる
そもそも型名が存在しない(ラムダ式など)
どんな時に使うの?
これまでに自分が使うべきだと思ったのが同じものを準備する時。
使用例を以下2つ挙げる。
1. 同じ型の変数を代入する場合
sample_not_auto
vector<int> v1 = {1, 2, 3, 4, 5};
vector<int> v2 = v1;
下のようにauto
を使うことができる。
sample_auto
vector<int> v1 = {1, 2, 3, 4, 5};
auto v2 = v1;
ちょっと短くなった。
ただのvector
ではこの程度の省略であるが、OSSなどのとても長い型を用いる時にはかなりの文字省略になる。
2. 型の記述を右辺に持っていきたい場合
sample_not_auto
vector<vector<int>> vv (10, vector<int>(10, 5));
こちらでauto
を用いると、
sample_auto
auto vv = vector<vector<int>>(10, vector<int>(10, 5));
こちらは短くなるというよりは、型を右辺のみに書くことができるので、後から見返しやすい。
ここではあまり嬉しくないが、OSSなどで見られるような非常に長い型では威力を発揮する。
3. ヘルパ関数を用いる場合
存在は知っていて、使う場面に出くわしていないので、使用例は割愛するが、型推論補助というのがある(気が向いたら記載します)。
4. 型推論補助を用いる場合
auto
に似ているが少し違うとのこと。
以下のようにすると、
deduction_guide
vector v = {1, 2, 3};
とするとvector<int>
に推論される。
注意点
あくまで、右辺値を左辺値に代入する際に型を推定するので、右辺から型がわからないもの
は使用できないことに注意。
おわりに
使った方が見やすくなるとは思っていつつ。auto
がたくさん並んでいるとよくわからなくなってしまうので、好みで使っています。
PCLを使用するときはどうしても型が長くなりがちなので、積極的に使っている。