হ্যা এবং না.
এটি নির্ভর করে যে আপনি C ++ এর কোন সংস্করণ ব্যবহার করছেন।
- সি ++ 98 এবং সি ++ 03
explicitটাইপ রূপান্তর অপারেটরদের সমর্থন করে না
- তবে সি ++ 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: ত্রুটি: 'এ' থেকে নন-স্ক্যালার প্রকারের 'স্টাড :: স্ট্রিং' রূপান্তরকরণের অনুরোধ করা হয়েছে
অনলাইন ডেমো: http://ideone.com/DJut1
তবে যত তাড়াতাড়ি আপনি লিখেছেন:
std::string s = static_cast<std::string>(a);
ত্রুটিটি চলে যায়: http://ideone.com/LhuFd
বিটিডাব্লু, সি ++ ১১-এ, সুস্পষ্ট রূপান্তর অপারেটরকে "প্রাসঙ্গিক রূপান্তর অপারেটর" হিসাবে উল্লেখ করা হয় যদি এটি বুলিয়ান রূপান্তর করে । এছাড়াও, আপনি যদি অন্তর্নিহিত এবং স্পষ্ট রূপান্তর সম্পর্কে আরও জানতে চান তবে এই বিষয়টি পড়ুন:
আশা করি এইটি কাজ করবে.
toStringবরং ফাংশনটি কল করুনoperator std::string। অবশ্যই এটি কিছু টেমপ্লেটগুলির সাথে সমস্যা তৈরি করতে পারে। আমি সর্বদা ব্যবহার করেছিtoStringএবং এটি কখনও আমার কোনও সমস্যা তৈরি করে নি, তবে আমি ধারণা করি এটি আপনার কোডিং শৈলীর উপর নির্ভর করতে পারে।