String クラスがあり、+ をオーバーロードして 2 つの String* ポインターを追加したいと考えています。
なんで?
このようなものは機能しません:
文字列* operator+(文字列* s1, 文字列* s2);
これは C++ のコア機能です。そのように変更することはできません。
参照渡しを回避する方法はありますか。
参照、ポインター、または値で渡すことができます。
値渡しは非効率的です (正当な理由なく一時的に作成およびコピーされるため*)
この場合、ポインターによる使用は使用できません (ポインターの追加はコア言語機能です)。実際、(オーバーロードされた演算子に) ポインターを引数として渡す効率と、値を渡す便利な構文を組み合わせるために、参照が言語に追加されました。つまり、参照は、特定の状況を念頭に置いて作成された言語機能です。それらは最適なソリューションです。
参考までに、通常は受け入れられている解決策です。あなたの状況でこれが良くない理由を教えてください。
次の例を検討してください。
String* s1 = new String("こんにちは"); String* s2 = new String("World");
文字列* s3 = s1 + s2;
これは、C++ 構文に変換された Java または C# コードのように見えます。そうしないでください。このメンタリティは「私はどの言語でも C をプログラムできる」と呼ばれ、通常、C++ に移植しようとしているメンタリティに固有の問題と、C++ の固有の問題を組み合わせます。どちらの利点もありません。
私はあなたがそれをしていると言っているのではなく、あなたがまだそれをしていないことを確認するために言っているだけです:)。
私は仕事にこの種の追加が必要です。提案してください。
文字列を保持するための追加のスマート ポインター クラスを定義できます。多くのことをする必要はありません (それだけでstruct ptr { String* _value; /* add your syntax sugar and operators here */ }
十分です。とはいえ、ポインタを追加するためだけにこれを行うのはまだ悪い考えです。