Pourquoi l'objet que je passe à ClassA
considère-t-il un rvalue (temporaire)? Je suis conscient que le réglage du paramètre à const
fera disparaître l'erreur, mais je veux comprendre ce qui se passe.Pourquoi cet objet est-il considéré comme une valeur?
Ce comportement fonctionne correctement pour un appel de fonction mais pas pour un constructeur?
#include <iostream>
using namespace std;
class ClassA {
public:
ClassA() {}
ClassA(ClassA&) {}
};
void f(ClassA&) {}
int main() {
ClassA a;
// Invalid initialization of non-const reference of type 'ClassA&' from an
// rvalue of type 'ClassA'
ClassA b = ClassA(a);
// Works fine
f(a);
return 0;
}
'f (ClassA (a))' est également invalide. – cpplearner