0

私はC ++のポインタと参照に慣れていないので、誰かが文字列参照とおそらく使用されている関数を返す関数を書く方法の例を見せてくれるかどうか疑問に思っていました. たとえば、次のような関数を書きたい場合...

//returns a refrence to a string
string& returnRefrence(){


    string hello = "Hello there";
    string * helloRefrence = &hello;

    return *helloRefrence;
}

//and if i wanted to use to that function to see the value of helloRefrence would i do something like this?

string hello = returnRefrence();
cout << hello << endl;
4

2 に答える 2

2

次のような関数

string& returnRefrence(){}

stringは、それ自身のスコープを超えて存在する にアクセスできるコンテキストでのみ意味があります。これは、たとえば、データ メンバーを持つクラスのメンバー関数string、または何らかのグローバル文字列オブジェクトにアクセスできる関数である可能性があります。関数の本体で作成された文字列は、そのスコープを終了すると破棄されるため、その参照を返すとダングリング参照が発生します。

意味のある別のオプションは、関数が参照によって文字列を取得し、その文字列への参照を返す場合です。

string& foo(string& s) {
  // do something with s
  return s;
}
于 2012-09-09T14:16:32.327 に答える
0

変数を静的として宣言することもできます。

std::string &MyFunction()
{
    static std::string hello = "Hello there";
    return hello;
}

ただし、呼び出しごとにまったく同じ文字列オブジェクトが参照として返されることに注意してください。

例えば、

std::string &Call1 = MyFunction();
Call1 += "123";

std::string Call2 = MyFunction(); //Call2 = "Hello there123", NOT "hello there"

Call2 オブジェクトは Call1 で参照されている文字列と同じであるため、変更された値を返しました。

于 2012-09-09T18:35:30.487 に答える