0にすることはできませんが、暗黙的に に変換stringできることを意味するポインタにすることができます。これは、またはのような他の定数積分には当てはまらないことに注意してください--具体的には。string1420
4.10 ポインタ変換
1/null ポインター定数は、0 に評価される整数型の整数定数式 (5.19) の右辺値です。null ポインター定数はポインター型に変換できます。結果はその型の null ポインター値であり、オブジェクトへのポインターまたは関数型へのポインターの他のすべての値と区別できます。同じ型の 2 つのヌル ポインター値は、比較すると等しくなります。null ポインター定数から cv 修飾型へのポインターへの変換は単一の変換であり、ポインター変換とそれに続く修飾変換 (4.4) のシーケンスではありません。
したがって、 の場合、 myclass[0]、または ` null ポインター定数0のいずれかになります。int
標準では、ポインターを受け取るstd::string非explicitコンストラクターがあることも規定されています。char
size_type find_last_not_of (const charT* s, size_type pos = npos) const;
これで、operator&メソッドは両方とも参照型のパラメーターを受け取るためconst、一時的に渡すことができます。これが、コンパイラーが混乱する理由です。コンパイラーはint、どちらが必要なのかわかりません。stringstring(const char*)
この問題を解決する方法については、一歩後退します。operator[]あなたの2つの機能は明らかに異なることをしているように私には思えます。または、異なる入力が与えられても、同じことを行う可能性があります。それらが異なることを行う場合は、異なる (適切な) 名前を持つメンバー関数を提供し、operator[]構文の使用をスキップします。おそらく、これらのメソッドの 1 つは、実際にインデックス付けされたものを返します。その場合、そのメソッドのoperator[]構文を使用しますが、その構文だけを使用します。
それらが実際に同じことを行い、それが index によってアイテムを返すことである場合、私はこれに対して 1 つのメソッドのみを提供し、それが by 値を取るようにsize_tします。string次に、たとえば aから aに変換する何らかの種類の変換関数 (できれば、フリーの非メンバー関数の形式) を提供することもできますsize_t。これを行うと、次のようにインデックスを作成するときにコードを記述できますstring。
myPos[str_to_index(str)];