Costruttore vs operatore di casting

2

Sto programmando una libreria (quindi ho accesso completo a tutte le classi menzionate). Due classi ( A e B ) sono essenzialmente le stesse e differiscono solo per la loro implementazione, quindi possono essere facilmente convertite l'una nell'altra. Ma mi sto chiedendo, se la conversione passando un argomento di tipo B a uno dei costruttori di A o copiando implicitamente B in A , è preferibile. Due esempi di codice per illustrare:

Uso della trasmissione:

class A
{
public:
    int c[3];
    operator B() const
    {
        //return B(...);
    }
};

class B
{
public:
    int a, b, c;
    operator A() const
    {
        //return A(...);
    }
};

Utilizzo del costruttore:

class A
{
public:
    A(const B& b)
    {
        //...
    }
    int c[3];
};

class B
{
public:
    B(const A& a)
    {
        //...
    }
    int a, b, c;
};

Quali sono i pro e i contro di entrambi gli approcci? Quale dovrebbe usare? E potrebbero esserci dei problemi, se qualcuno estendesse la libreria e usasse la parola chiave explicit in alcuni dei suoi costruttori?

    
posta Benjamin Rickels 11.01.2015 - 12:38
fonte

1 risposta

2

Il modo comune per eseguire tali conversioni è tramite il costruttore. Gli operatori typecast sono usati efficacemente solo per le conversioni su tipi primitivi (e quindi principalmente su bool o qualcosa che agisce efficacemente come un booleano) o tipi a cui non è possibile aggiungere un costruttore aggiuntivo.

Gli operatori typecast hanno un rischio molto maggiore di essere invocati in momenti imprevisti rispetto alla conversione dei costruttori e dovrebbero generalmente essere trattati con estrema cautela.

    
risposta data 11.01.2015 - 18:38
fonte

Leggi altre domande sui tag