Nell'esempio seguente, quale funzione di conversione dovrebbe essere chiamata? Perché questo dovrebbe essere scelto rispetto all'altro?Se il primo operando di un'espressione additiva è convertibile sia in puntatore sia in intero, quale conversione viene scelta?
struct A
{
operator int();
operator int*();
};
A x;
int i = x + 1;
Il compilatore sceglie operator int()
.. ma perché?
Ecco alcune citazioni importanti da C++ 03:
Da [expr.add]
Per Inoltre, sia entrambi gli operandi avranno l'aritmetica o tipo di enumerazione, o un operando deve essere un puntatore a un tipo di oggetto completamente definito e l'altro deve avere tipo integrale o di enumerazione.
Da [CONV]
espressioni con un determinato tipo saranno implicitamente convertiti in altri tipi in diversi contesti:
- Quando viene utilizzato come operandi degli operatori. esigenze dell'operatore per i suoi operandi dettare il tipo di destinazione
Direi che questo dovrebbe essere ambiguo. Non penso * che i non-puntatori siano più speciali. – chris
Chiama l'altro se dici 'int * i = x + 1;'? – John
@John, No, si lamenta solo di 'int -> int *'. – chris