Evet ve hayır.
Hangi C ++ sürümünü kullandığınıza bağlıdır.
- C ++ 98 ve C ++ 03,
explicit
tür dönüştürme operatörlerini desteklemez
- Ancak C ++ 11 bunu yapar.
Misal,
struct A
{
operator int() { return 100; }
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a;
std::string s = a;
}
İle derleyin g++ -std=c++0x
, şu hatayı alacaksınız:
prog.cpp: 13: 20: hata: 'A'dan skaler olmayan' std :: string 'türüne dönüştürme istendi
Çevrimiçi demo: http://ideone.com/DJut1
Ama yazar yazmaz:
std::string s = static_cast<std::string>(a);
Hata ortadan kalkar : http://ideone.com/LhuFd
BTW, C ++ 11'de, açık dönüştürme operatörü, boolean'a dönüştürüyorsa "bağlamsal dönüştürme operatörü" olarak anılır . Ayrıca, örtük ve açık dönüştürmeler hakkında daha fazla bilgi edinmek istiyorsanız bu konuyu okuyun:
Umarım yardımcı olur.
toString
yerine işlevi çağırmanız yeterlioperator std::string
. Elbette bu, bazı şablonlarda sorunlara neden olabilir. Her zaman kullandımtoString
ve bu bana hiçbir zaman sorun çıkarmadı, ancak bunun kodlama stilinize bağlı olabileceğini hayal ediyorum.