OVH Cloud OVH Cloud

explicit

4 réponses
Avatar
JBB
Quelqu'un utilise t'il ce mot clé ?
Dans quel cas?

JB

4 réponses

Avatar
Marc Boyer
JBB a écrit :
Quelqu'un utilise t'il ce mot clé ?


Oui.

Dans quel cas?


Pour éviter des conversions implicites ;-)

#include <vector>
class Buffer{
public:
Buffer(int size):v(size){};
private:
std::vector<unsigned char> v;
};

void f(Buffer b);

void g(){
f(2); // Appel de f( Buffer(2) )
}

Marc Boyer
--
À vélo, prendre une rue à contre-sens est moins dangereux
que prendre un boulevard dans le sens légal. À qui la faute ?

Avatar
nico
JBB wrote:

Quelqu'un utilise t'il ce mot clé ?
Dans quel cas?

JB


Salut,

Pour déclarer un constructeur explicite, ie bloque l'utilisation implicite
du constructeur comme constructeur de conversion :

Class A
{
public:
explicit A(int) {}
}

Class B
{
public:
A(int) {}
}

void fooa(A) {}
void foob(B) {}

A a1 = 77; //illegal
A a2 = A(77); //ok
A a3(77); //ok
fooa(77); //illegal
fooa(A(77)); //ok

B b1 = 77; //ok
B b2 = A(77); //ok
B b3(77); //ok
foob(77); //ok
foob(A(77)); //ok


--
nico

Avatar
Eric Pruneau
"JBB" a écrit dans le message de news:
43732c1e$0$10303$
Quelqu'un utilise t'il ce mot clé ?


oui
Dans quel cas?

JB


pour un constructeur avec 1 SEUL parametre.
Le mot clé explicit est inutile si le constructeur a plus d'un parametre.

Eric

Avatar
Falk Tannhäuser
Eric Pruneau wrote:
"JBB" a écrit dans le message de news:
Quelqu'un utilise t'il ce mot clé ?
Dans quel cas?


pour un constructeur avec 1 SEUL parametre.
Le mot clé explicit est inutile si le constructeur a plus d'un parametre.


Sauf s'il y a des arguments par défaut permettant
d'appeler le constructeur avec un seul argument.

Falk