簡単に言うと、auto
は、var
よりはるかに複雑な獣です。
まず、auto
は演繹型の一部であるに過ぎません。
std::vector<X> xs;
// Fill xs
for (auto x : xs) x.modify(); // modifies the local copy of object contained in xs
for (auto& x : xs) x.modify(); // modifies the object contained in xs
for (auto const& x : xs) x.modify(); // Error: x is const ref
次に、auto
一度に複数のオブジェクトを宣言するために使用することができる:例えば
int f();
int* g();
auto i = f(), *pi = g();
第三に、auto
は、関数宣言におけるトレーリング戻り型構文の一部として使用されている:
template <class T, class U>
auto add(T t, U u) -> decltype(t + u);
また、関数定義の型減算にも使用できます。
template <class T, class U>
auto add(T t, U u) { return t + u; }
第四に、将来的には、関数テンプレートを宣言するために使用されることを始めることがあります。
void f(auto (auto::*mf)(auto));
// Same as:
template<typename T, typename U, typename V> void f(T (U::*mf)(V));
出典
2016-11-24 13:38:15
ach
彼らは本質的に同じであるため、両者はその後、型推論 – UnholySheep
のために使用され、どちらも技術的には同じですか? –
同じ効果を実現する2つのキーワード、つまり異なるプログラミング言語 – UnholySheep