Dans le code suivant, A(100)
est un objet temporaire ou une valeur r. Le compilateur n'a pas généré d'erreur lorsqu'une fonction membre a tenté de modifier une variable membre. Les valeurs r sont-elles en lecture seule?Pourquoi les objets de valeur r sont-ils autorisés à être modifiés par le compilateur?
#include <iostream>
using namespace std;
class A
{
int i;
public:
A() {cout << "In default ctor\n";};
A(int v) {cout << "Setting i in par-ctor to " << v << "\n"; i=v;}
void print() {cout << "i = " << i << endl;}
void seti(int val){i=val;print();}
};
int main()
{
A(100).seti(200);
return(0);
}
De plus, s'il est nécessaire d'utiliser const
dans les constructeurs de copie pour assurer rvalues ne sont pas modifiés, pourquoi est-ce pas le même cas ici?
'Les valeurs r ne sont-elles pas en lecture seule?' Qui a dit cela? – 101010