explicit

42_Cursus·2022년 5월 11일
0

CPP

목록 보기
2/10

explicit

En effet, cela empêche les conversions de type inattendues (et généralement indésirables) auxquelles le programmeur ne s'attend pas.
les déclarations "explicite" de constructeurs ont la priorité, à moins qu'il n'y ait une raison impérieuse de laisser de la place aux constructeurs à utiliser pour les conversions de type implicites.

par example,


class Foo {
	public:
   		Foo();
       	Foo(Foo const &rhs);	// copy constructor
       	Foo& operator=(Foo const &rhs);	// copy assignment operator
          	...
 };
 
 Foo	f1;	// call constructor
 Foo 	f2(f1);	// call copy constructor
 f1 = f2;	// call copy assignment opeator

 Foo	f3 = f2 // call copy constructor
 				// et cela est possible en l'absence de "explicit"

dans ce cas, " f1 = f2" est un "copy assignment operator", parcequ'il y a pas
de constructor!!

par contre, " Foo f3 = f2; " , pour cela, "copy constructor"
donc, pour éviter la situation implicitée, on doit mettre "explicit" devant la declaration de constructor!!!


class Foo {
	public:
   		explicit Foo();
       	explicit Foo(Foo const &rhs);	// copy constructor
       	Foo& operator=(Foo const &rhs);	// copy assignment operator
          	...
 };
 
 Foo	f1;	// call constructor
 Foo 	f2(f1);	// call copy constructor
 f1 = f2;	// call copy assignment opeator

 //Foo	f3 = f2 // pas possible
profile
etudiant_42

0개의 댓글