1. ホーム
  2. c++

[解決済み] C++におけるポインタへの参照の渡し方

2022-06-16 10:03:26

質問

私が知る限り、C++でポインタに参照を渡してはいけないという理由はありません。しかし、そうしようとする試みは失敗しており、その理由がわかりません。

これは私がやっていることです。

void myfunc(string*& val)
{
    // Do stuff to the string pointer
}

// sometime later 
{
    // ...
    string s;
    myfunc(&s);
    // ...
}

で、こんなエラーが出てる。

cannot convert parameter 1 from 'std::string *' to 'std::string *&'.

どのように解決すればよいですか?

この関数は、無名文字列ポインタではなく、呼び出し側のスコープにある実際の文字列ポインタへの参照を想定しています。したがって

string s;
string* _s = &s;
myfunc(_s);

はうまくコンパイルできるはずです。

しかし、これは関数に渡すポインタを変更する場合のみ有効です。もし文字列そのものを変更するつもりなら、Sakeが提案したように文字列への参照を使用すべきです。この点を考慮すれば、コンパイラがあなたの元のコードに文句を言う理由もより明白になるはずです。あなたのコードでは、ポインタは「その場で」作成され、そのポインタを変更しても何の影響もありませんし、それは意図されたものではありません。参照(対ポインタ)の考え方は、参照は常に実際のオブジェクトを指しているということです。