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