Так і ні.
Це залежить від того, яку версію С ++ ви використовуєте.
- 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
, і це ніколи не створювало мені проблем, але я думаю, що це може залежати від вашого стилю кодування.