C の変換演算子を理解する
オブジェクト指向プログラミングの領域では、変換演算子は、異なる言語間のギャップを埋める上で重要な役割を果たします。データ型。これらの演算子を使用すると、オブジェクトを別の型として扱うことができ、その使いやすさが広がります。
変換演算子がどのように機能するかを示す次の例を考えてみましょう。
template <class Type> class smartref { public: smartref() : data(new Type) { } operator Type&() { return *data; } private: Type* data; }; class person { public: void think() { std::cout << "I am thinking"; } }; int main() { smartref<person> p; p.think(); // why does not the compiler try substituting Type&? }
この例では、smartref クラスは次のとおりです。テンプレート クラスとして定義され、任意の型 Type のインスタンスを保持できます。変換演算子演算子 Type&() は、smartref オブジェクトを基礎となる Type 参照にキャストするために実装されています。
コンパイラーが Type& を置換するとき
コンパイラーは、Type& を置換します。次の状況での変換演算子:
この例の場合、コンパイラは、think() 関数呼び出し内で Type& が呼び出されるため、これを置換しません。これは、Type& への左辺値参照ではない、smartref
以上がコンパイラはいつ C 変換演算子の `Type&` を置き換えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。