C 11 の "auto" セマンティクス
C 11 では、"auto" キーワードにより、コンパイラが a の型を自動的に推測できます。変数。この推論のルールを理解することは、「auto」の結果が値型になるか参照型になるかを判断する際に非常に重要です。
値と参照の型推論
プライマリ型推論を支配する原則は、「auto」の型は宣言方法によって決定されるということです。例:
<code class="cpp">int i = 5; auto a1 = i; // value auto &a2 = i; // reference</code>
上記の例では、「a1」は整数値として推定され、「a2」は整数参照として推定されます。
例
1.参照を返す:
<code class="cpp">const std::shared_ptr<Foo>& get_foo(); auto p = get_foo();</code>
この場合、「get_foo()」は const 参照を返すため、「auto」は参照型を推定します。
2.静的ポインタ:
<code class="cpp">static std::shared_ptr<Foo> s_foo; auto sp = s_foo;</code>
ここで、「s_foo」は静的ポインタであり参照ではないため、「auto」は値の型を推定します。
3.ポインターのコンテナーのループ:
<code class="cpp">std::vector<std::shared_ptr<Foo>> c; for (auto foo : c) {</code>
このループでは、「auto」により、「foo」が Foo への共有ポインターとして推定されます。各反復では、ポインターの値のコピーが作成されます。
結論
要約すると、C 11 の "auto" の型推論ルールは簡単です。初期化式が値の場合、「auto」は値の型を推測します。初期化式が参照の場合、「auto」は参照型を推定します。 「自動」を効果的に使用し、予期しない動作を回避するには、これらのルールを理解することが不可欠です。
以上がC 11 で「auto」が値と参照を推定するのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。