あり同様の以前の質問がありますが、私は別の質問を見つけることができるすべてのもの:static_castまたはtoX()に対して「明示的演算子X」による型変換?
- static_cast vs. direct call to conversion operator - について
static_cast
Cスタイルのキャスト対を話しstatic_cast<string>(x)
x.operator string()
対多くを説明し、関連するが異なるが、(しばしば言及
)関数スタイルのキャストとして、それまでのexpを実装する方法を決めるとき、私は検討すべき事は何ですかクラスでの不正な変換?私は機能toX()
を持つことができ、
class myClass {
public:
explicit operator std::string() const {
...
}
};
const myClass x{...};
std::string str = static_cast<std::string>(x);
または::
C++ 11では、私は明示的な変換演算子を持つことができます
私のclass myClass {
public:
std::string toString() const {
...
}
};
const myClass x{...};
std::string str = x.toString();
一部は、彼らが同じだ考えています私の一部は、いくつかのシナリオやベストプラクティスのガイドラインが欠けているに違いないと思っています。 static_cast
を付与
はmyClass::explicit operator std::string()
またはstd::string(myClass)
への呼び出しを許可しますが、私はstd::string()
は、変換コンストラクタを持たない場合の決定は、ここのように、変換がmyClass
内で行わ持つように作られている時点での集中だけど、この区別は機能しません。また、継承階層間でのキャストも可能ですが、これはここでも行われません。