1

重複の可能性:
C++ 関数: アンパサンドとアスタリスク
パラメータと組み合わせたさまざまな記号 (*、& など) の違いは何ですか?

C++ 関数呼び出しでのアドレス演算子&と参照演算子の違いが気になります。*たとえば、次の関数を使用します

void foo (std::string& param)
{
     param = "Bar.";
     std::cout << param.size();
}

関数内で次のように呼び出してみましょうmain()...

int main()
{
      std::string test;
      foo(test);          //Why not foo(&test)?
      std::cout << test;  //Prints out the value "Bar."
}

まず、関数で出力できるのに、なぜ&演算子は値をポインターであるかのように割り当てることを許可するのですか (ポインターではない場合、RAII と関数のスコープを存続する値を割り当てますfoo())。main()そうじゃないのにstatic?ポインターに使用されるのではなく、演算子size()を使用してメソッドにアクセスできるため、ポインターではないと想定しています。.->

&次に、関数パラメーターで演算子を使用する場合と演算子を使用する場合の違いは何*ですか? のような単純な変数とは違いますstd::string paramか? そのように(foo(test)ではなくfoo(&test))呼び出されているようです。

4

2 に答える 2

4

&function パラメーターは、このパラメーターが参照によって渡されることを明確に示します(従来、コンパイラーはこれをポインターとして実装します)。これが、main(). staticそれとは何の関係もないでしょう。

&andを使用して関数にパラメーターを宣言する場合の違いは*、2 つ目の方法ではnullptr(または存在しない、または単なる無効なアドレス) を渡すことができる一方で、&この関数の引数によって参照される実際のオブジェクトが存在することを保証することです。 . それ以外は、どちらも元のオブジェクトをその参照を介して変更できるようにするという同様の機能を提供します。

于 2012-07-14T19:39:47.307 に答える
0

testそれ自体で(なしで&)文字列へのコピーを関数に&渡しますが、参照を渡すことを意味します。

参考までに: 参照が必要ない場合、ベスト プラクティスでは、すべてのオブジェクトを const 参照として渡すことが指示されます。

于 2012-07-14T19:36:47.950 に答える