2010-07-03 6 views
0

La conversion d'une variable en un autre type renvoie-t-elle une copie temporaire de cette variable? Si oui, pourquoi ne pouvez-vous pas référencer la variable temporaire à une fonction?Type de retour d'incantation

void func(int &i) //error converting parameter 1 from int to int& 
{ 
} 

int main() 
{ 
    double d = 6.8; 
    func(int(d)); 
} 

Répondre

1

Oui, la conversion renvoie une valeur rvalue (valeur temporaire), mais une référence mutable nécessite une valeur lvalue.

Essayez ceci:

int main() { 
    double d = 6.8; 
    { 
     int v = d; 
     func(v); 
     d = v; // if the change needs to be reflected back to d. 
     // note that, even if `func` doesn't change `v`, 
     // `d` will always be truncated to 6. 
    } 
} 

Si func ne va pas modifier i, l'argument d'entrée doit être un const référence, qui peut accepter une rvalue.

void func(const int& i); 

(mais pour les primitives func(int i) va être plus efficace.)

0

Le problème est que lorsque vous faites int(d) dans l'appel à func, il crée un objet temporaire. Vous ne pouvez pas lier une référence à temporaire. Au moins, pas avant que C++ 0x n'arrive et nous obtenons des références rvalue (certains compilateurs les supportent déjà, mais les implémentations peuvent ne pas être totalement solides). Vous devez avoir une variable int définie pour stocker la valeur convertie, puis passer cela à la fonction.