私の知る限り、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 が提案したように文字列への参照を使用する必要があります。それを念頭に置くと、コンパイラーが元のコードについてエラーを出す理由がより明確になります。コードでは、ポインターは「オンザフライ」で作成され、そのポインターを変更しても影響はなく、それは意図されたものではありません。参照 (ポインターに対して) の考え方は、参照は常に実際のオブジェクトを指すというものです。