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