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
(すべてのタイプを除外の中に入れる醜いトリック)
一部の可変個引数テンプレート アプリケーションで使用される場合もあります。