explicit
Z cppreference.com
Przy oznaczeniu konstruktora jako explicit, nie będzie przeprowadzana automatyczna konwersja przy pomocy tego konstruktora. Konstruktor ten może jednak przyjmować skonwertowane parametry. Przykład:
struct foo {
explicit foo( int a )
: a_( a )
{ }
int a_;
};
int bar( const foo & f ) {
return f.a_;
}
bar( 1 ); // BŁĄD. konwersja z int na foo jest zablokowana przez parametr explicit
bar( foo( 1 ) ); // DOBRZE. wywołanie konstruktora z pomocą wybranego "bezpiecznego" parametru
bar( static_cast<foo>( 1 ) ); // DOBRZE - wywołanie konstruktora z pomocą rzutowanego parametru
bar( foo( 1.0 ) ); // DOBRZE - wywołanie konstruktora z pomocą rzutowanego parametru przy czym parametr automatycznie wykona konwersje z float to int