2011 C++ 標準では、新しいキーワード が導入されましたauto。これは、型の代わりに変数を定義するために使用できます。
auto p=make_pair(1,2.5); // pair<int,double>
auto i=std::begin(c), end=std::end(c); // decltype(std::begin(c))
2 行目のiとendは同じタイプで、 として参照されautoます。標準では許可されていません
auto i=std::begin(container), e=std::end(container), x=*i;
x異なるタイプになるのはいつですか。私の質問: 標準では、この最後の行が許可されていないのはなぜですか? これは、推定される型を表すものとしてではなく、宣言された変数autoの型が割り当てられた値から推定されることを示すものとして解釈することによって許可される可能性があります。C++11 標準がこのアプローチに従わない正当な理由はありますか?auto
これには実際に使用例があります。つまり、forループの初期化ステートメントです。
for(auto i=std::begin(c), end=std::end(c), x=*i; i!=end; ++i, x+=*i)
{ ... }
変数i、end、およびのスコープがループxに限定されている場合。for私の知る限り、これらの変数に共通の型がない限り、これは C++ では実現できません。これは正しいです?struct(すべてのタイプを除外の中に入れる醜いトリック)
一部の可変個引数テンプレート アプリケーションで使用される場合もあります。