Да и нет.
Это зависит от того, какую версию C ++ вы используете.
- C ++ 98 и C ++ 03 не поддерживают
explicit
операторы преобразования типов
- Но 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 оператор явного преобразования именуется «оператором контекстного преобразования» , если он преобразуется в логическое . Также, если вы хотите узнать больше о неявных и явных преобразованиях, прочитайте эту тему:
Надеюсь, это поможет.