Lors d'une tentative de passer un objet temporaire comme référence non const, comme dans le code suivant :
void ProcessFoo(Foo& foo) { } int main() { ProcessFoo(Foo(42)); // Error: Can't pass temporary object as reference }
les compilateurs comme g et clang génèrent une erreur. Cela se produit parce que, de par sa conception, C restreint le passage de données temporaires aux références const, aux paramètres de valeur ou aux références rvalue.
La justification de cette restriction est que les fonctions recevant des paramètres de référence non const ont l'intention de modifier ces paramètres et de les renvoyer. à l'appelant. Passer un temporaire dans ce scénario est considéré comme absurde et probablement révélateur d'une erreur.
Pour résoudre ce problème, plusieurs solutions de contournement sont disponibles :
1. Utiliser une variable temporaire
Créez une variable temporaire et transmettez-la à la fonction comme argument :
Foo foo42(42); ProcessFoo(foo42);
2. Déclarer la fonction avec un paramètre de référence const
Modifier la déclaration de fonction pour accepter une référence const :
void ProcessFoo(const Foo& foo) { }
3. Passage par valeur
Autoriser la fonction à accepter l'objet par valeur :
void ProcessFoo(Foo foo) { }
Visual Studio autorise ce code original en raison d'une implémentation moins restrictive du compilateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!