C 11 "auto" 型推定: 参照と値の解決
C 11 では、"auto" キーワードが便利な方法を提供します変数の型を自動的に推定します。ただし、「auto」を使用する場合は、値と参照のどちらに解決されるかを決定するルールを理解することが重要です。
「auto」の型推定ルール:
基本的なルールは、「auto」は変数が表す型ではなく、変数自体の宣言を解釈するということです。したがって、次の例は、「auto」が値に解決されることを明確に示しています:
<code class="cpp">auto i = v.begin(); // Copy, as begin() returns an iterator by value</code>
ただし、より複雑なシナリオでは、区別があまり明確ではない可能性があります。次の例を考えてみましょう:
<code class="cpp">const std::shared_ptr<Foo>& get_foo(); auto p = get_foo(); // Copy or reference?</code>
この場合、「auto」は次から型を推測します。 get_foo() 関数の戻り値の型。std::shared_ptr
<code class="cpp">static std::shared_ptr<Foo> s_foo; auto sp = s_foo; // Copy or reference?</code>
ここで、「auto」は、静的な std::shared_ptr
<code class="cpp">std::vector<std::shared_ptr<Foo>> c; for (auto foo: c) { // Copy for every loop iteration?</code>
この場合、「auto」はベクトルの反復子の型から型を推定します。イテレータは、参照型である std::shared_ptr
結論:
「auto」型推定のルールは簡単です。変数自体の宣言に従います。参照に解決するには、宣言でアンパサンドを使用します (auto &ref = ...)。それ以外の場合、「auto」は値の型を推測します。
以上がC 11 で \'auto\' を使用する場合、変数が参照であるか値であるかはどのように判断されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。