Explicit 変換演算子(C++0x)
C++11 対応機能:インデックス への移動
C++Builder 2009 では C++0x 標準の機能の 1 つである explicit 変換演算子がサポートされています。
ユーザー定義変換演算子の定義で関数指定子 explicit を適用できるようになりました。 以前に、明示的なコンストラクタ(コピー コンストラクタを含む)は、コンパイラで暗黙的に呼び出される、意図しない変換を防ぐために言語に追加されていました。 explicit 変換演算子は意図しない変換の呼び出しを同じように回避するために追加されています。
explicit として宣言された変換関数は明示的なコンストラクタ(直接初期化の explicit 型変換)と同じコンテキストで動作します。 Explicit 変換演算子は明示的なコンストラクタと同じコンテキスト(コピーの初期化)でコンパイラの診断を生成します。
以下に例を示します。
class T {
};
class X {
public:
explicit operator T() const ;
};
void m() {
X x;
// キャストあり
T tc = (T)x; // ok
// キャストなし
T t = x; // エラー: E2034 'X' を 'T' に変換できません
}