私はC++で演算子のオーバーロード、特に代入演算子「=」で遊んでいます。
だから、一度に、私はこれを行うことができます:
MyClass var1;
var1 = "string";
ただし、これを実行しようとするとエラーが発生します。
MyClass var2 = "string";
誰かが理由を知っていますか?そして、どうすればそれを可能にできますか?
私はC++で演算子のオーバーロード、特に代入演算子「=」で遊んでいます。
だから、一度に、私はこれを行うことができます:
MyClass var1;
var1 = "string";
ただし、これを実行しようとするとエラーが発生します。
MyClass var2 = "string";
誰かが理由を知っていますか?そして、どうすればそれを可能にできますか?
2 番目の例は を呼び出すoperator=
のではなく、 の変換コンストラクターを呼び出すconst char []
か、内部で使用するものは何でも、それから変換できる限り (たとえばstd::string
) を呼び出しますが、これはまだ存在しません。std''OrgnlDave's answer に実装されているものを見ることができます。とほぼ同じです
MyClass var2 ("string");
ただし、後者は明示的ですが、前者は暗黙的です。違いを確認するには、コンストラクターを作成してマークしexplicit
ます。ここのコードは機能しますが、あなたのコードは機能しません。これにより、たとえば、 の代わりに誤って文字列を渡した場合の混乱を避けることができます。また、そもそも であるMyClass
必要がない場合でも、暗黙的に変換されます。MyClass
クラスのコンストラクターを作成する必要があります。2 番目の例は、コンストラクターの呼び出しです。
class MyClass {
public:
MyClass(const std::string& what) { } // copy string
};