2015-10-22 10 views
6

これはC++で書かれたアプリケーション用です。C++でoperatorキーワードを使用するとどういう意味がありますか?

operator FILE*(){return stream;} 

私が作るしようとすると、デバッガを使用して通過してされています:どのような状況下では、この行はstruct定義(streamがタイプFILE*のメンバ変数である)の文脈の中で、あなたがたのうちに理にかなってそれの感覚ですが、私はそのコード行を有効にすることはできません。このような方法で演算子のオーバーロードキーワードが発生したことはありません。このコード行は何をすることができますか?

+5

オペレータは暗黙的です変換演算子。最も一般的な形式は演算子boolです。クラスオブジェクトは、unique_ptrやshared_ptrのようにブール式で使用できます – jaggedSpire

答えて

9

implicit conversion operatorです。

暗黙的な変換演算子では、暗黙的に変換先のタイプに変換されないタイプが許可されます。この演算子のより一般的な例としてブール値にオブジェクトを変換している

class Foo{ 
public: 
    operator Bar(); // allow implicit conversion of Foo objects to Bar 
}; 

:彼らはFooを暗黙的に変換されるオブジェクトのクラスであり、Bar宛先クラスで以下の構文を有します有効性チェック。これは、標準ライブラリのストリームとスマートポインタで見ることができます。

既存の変換を防ぐ構文、上のバリエーションが存在することを注意して、代わりに明示的な変換を行う必要があります

class Foo{ 
public: 
    explicit operator Bar(); // allow explicit conversion of Foo objects to Bar 
}; 

誤っ種類を供給するときこれはコンパイルプログラムによってかま取得を防止Bのみを受け入れる関数にタイプBに変換できるAがあります。確かに、となりますが、必ずしもそうではありません。明示的な変換が必要な人を支援するために、これを言語に追加することにしました。

明示的な変換演算子で

、あなたは元のオブジェクトからオブジェクトを作成することができますいずれかの構造を介して、または明示的なキャストによって(ターゲット型のオブジェクトの構築にそれを使用して):​​

+0

うまく見えます –

関連する問題