règles avec des objets temporaires et args par référence
Question
dire que j'ai une classe:
class A
{
public:
A() {}
};
et une fonction:
void x(const A & s) {}
et je fais:
x(A());
Quelqu'un pourrait-il s'il vous plaît me expliquer les règles en ce qui concerne le passage des objets temporaires par référence? En termes de ce que le compilateur permet, où vous avez besoin const, si une copie implicite se produit, etc. De jouer autour, il semble que vous avez besoin de const ce qui est logique, mais est-il une règle formelle au sujet de tout cela?
Merci!
La solution
Il y a une règle formelle - la norme C ++ (section 13.3.3.1.4 si vous êtes intéressé) déclare qu'un temporaire ne peut être lié à une référence const - si vous essayez d'utiliser une référence non-const le compilateur doit drapeau comme une erreur.
Autres conseils
Herb Sutter fait un excellent travail en expliquant ici: http://www.gotw.ca /gotw/081.htm
x () doit prendre soit une référence à un const A temporaire, ou x () doivent prendre un A par valeur.