Przestrzenie nazw
Warianty
Działania

explicit

Z cppreference.com
< cpp‎ | keyword

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