C++ でポインタへの参照を渡す 質問する

C++ でポインタへの参照を渡す 質問する

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

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

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

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

そして、次のエラーが発生します:

パラメータ 1 を 'std::string *' から 'std::string *&' に変換できません

ベストアンサー1

関数は、匿名の文字列ポインターではなく、呼び出しスコープ内の実際の文字列ポインターへの参照を想定しています。つまり、

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

問題なくコンパイルできるはずです。

ただし、これは関数に渡すポインターを変更する場合にのみ役立ちます。文字列自体を変更する場合は、Sake が提案したように文字列への参照を使用する必要があります。それを念頭に置くと、コンパイラーが元のコードについてエラーを出す理由がより明確になります。コードでは、ポインターは「オンザフライ」で作成され、そのポインターを変更しても影響はなく、それは意図されたものではありません。参照 (ポインターに対して) の考え方は、参照は常に実際のオブジェクトを指すというものです。

おすすめ記事