Le code est le suivant:La fonction C++ renvoie un rvalue, mais une nouvelle valeur peut-elle lui être affectée?
#include <iostream>
using namespace std;
class A {
};
A rtByValue() {
return A();
}
void passByRef(A &aRef) {
// do nothing
}
int main() {
A aa;
rtByValue() = aa; // compile without errors
passByRef(rtByValue()); // compile with error
return 0;
}
Le compilateur g ++ donne l'erreur suivante:
d.cpp: In function ‘int main()’:
d.cpp:19:23: error: invalid initialization of non-const reference of type ‘A&’ from an rvalue of type ‘A’
d.cpp:12:6: error: in passing argument 1 of ‘void passByRef(A&)’
Il dit que je ne peux pas passer un rvalue comme argument d'une référence non-const, mais ce que je suis confus est de savoir pourquoi je peux attribuer à cette valeur, comme le montre le code.
Oui, les références non const ne peuvent pas être liées à des temporaires. – chris
Étrange. Je peux compiler et exécuter ceci dans MS VS 2010. – Kupto
@chris mais pourquoi je peux l'assigner. Je peux l'assigner, pourquoi je ne peux pas le passer comme référence? – haipeng31