この記事を読む:C++ 0xの中の自動変数のAppearing and Disappearing consts in C++
型推論は、基本的にテンプレートパラメータのための と同じです。 (私の知る限りでは、両者の間の唯一の違い は、テンプレートパラメータの種類はないかもしれないが、自動変数の型は、 初期化子リストから推定することができるということである。) 次の宣言はそれぞれ、そのための変数を宣言 INT(決してのconst int型)タイプ:テンプレートパラメータと自動変数の型推論中に
auto a1 = i;
auto a2 = ci;
auto a3 = *pci;
auto a4 = pcs->i;
を、唯一 トップレベルconstsが削除されます。 ポインタまたは参照パラメータを取る関数テンプレートを考えると、 尖ったまたは呼ばれているものは何でものconst性が保持されます。
template<typename T>
void f(T& p);
int i;
const int ci = 0;
const int *pci = &i;
f(i); // as before, calls f<int>, i.e., T is int
f(ci); // now calls f<const int>, i.e., T is const int
f(*pci); // also calls f<const int>, i.e., T is const int
この動作は、それがC +の両方に同じように適用し、古いニュースです98と C++ 03。自動変数のための対応する動作は、当然のことながら、C++ 0xのに新しい です:
auto& a1 = i; // a1 is of type int&
auto& a2 = ci; // a2 is of type const int&
auto& a3 = *pci; // a3 is also of type const int&
auto& a4 = pcs->i; // a4 is of type const int&, too
タイプが参照またはポインタである場合は、CV-修飾子を保持することができますので、あなたができます実行します。代わりにconst
として指定することの
auto& my_foo2 = GetFoo();
(同じことがvolatile
のために行きます)。
編集:(あなたのメインの質問、申し訳ありませんでした)auto
ではなく、参照の値としてGetFoo()
の戻り値の型を推論する理由については、このことを考慮してください。
は
const Foo my_foo = GetFoo();
上記作成されます。 my_foo
は値です。 auto
が左辺値参照を返す場合、上記は不可能です。
どのコンパイラを使用していますか? –
VC++ 2010およびIntel C++コンパイラ – minjang