はいといいえ。
使用しているC ++のバージョンによって異なります。
- C ++ 98およびC ++ 03は、
explicit
型変換演算子をサポートしていません
- しかし、C ++ 11はそうします。
例、
struct A
{
operator int() { return 100; }
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a;
std::string s = a;
}
でコンパイルするとg++ -std=c++0x
、次のエラーが発生します。
prog.cpp:13:20:エラー:「A」から非スカラー型への変換「std :: string」が要求されました
オンラインデモ:http://ideone.com/DJut1
しかし、あなたが書くとすぐに:
std::string s = static_cast<std::string>(a);
エラーはなくなります:http://ideone.com/LhuFd
ところで、C ++ 11では、明示的な変換演算子は、ブール値に変換される場合、「コンテキスト変換演算子」と呼ばれます。また、暗黙的および明示的な変換について詳しく知りたい場合は、次のトピックをお読みください。
お役に立てば幸いです。
toString
ではなく、関数を呼び出すだけですoperator std::string
。もちろん、これにより一部のテンプレートで問題が発生する可能性があります。私はいつも使っtoString
ていて、問題が発生することはありませんが、これはコーディングスタイルに依存する可能性があると思います。