explicit কীওয়ার্ড কনস্ট্রাক্টরকে ইমপ্লিসিট (Implicit) কনভারশন থেকে বাধা দেয়।
সমস্যা
class Foo {
public:
Foo(int n); // n বাইট অ্যালোকেট
Foo(const char* p); // স্ট্রিং দিয়ে ইনিশিয়ালাইজ
};
Foo mystring = 'x'; // char 'x' ইমপ্লিসিটলি int-এ কনভার্ট হয়ে Foo(int) কল করে!
এটি অনিচ্ছাকৃত আচরণ।
সমাধান: explicit ব্যবহার
class Foo {
public:
explicit Foo(int n); // এখন ইমপ্লিসিট কনভারশন বাধা
Foo(const char* p); // এটি implicit থাকতে পারে
};
এখন Foo f = 10; কম্পাইল এরর দেবে। লিখতে হবে Foo f(10); বা Foo f = Foo(10);।
সুপারিশ: এক আর্গুমেন্ট वाले সব কনস্ট্রাক্টর explicit ঘোষণা করুন, ব noexcept কপি/মুভ কনস্ট্রাক্টর ছাড়া।