Maison > développement back-end > C++ > Pourquoi ne puis-je pas transmettre un objet C temporaire à une référence non-const ?

Pourquoi ne puis-je pas transmettre un objet C temporaire à une référence non-const ?

Linda Hamilton
Libérer: 2024-11-29 21:01:13
original
666 Les gens l'ont consulté

Why Can't I Pass a Temporary C   Object to a Non-Const Reference?

Passer des objets temporaires comme références

En C , l'utilisation d'un objet temporaire comme référence peut conduire à un comportement inattendu. Pour éviter cela, le compilateur applique des restrictions sur le passage d'objets temporaires aux paramètres de référence.

Lors de la compilation du code fourni dans la requête initiale :

class Foo { public: Foo(int x) {}; };
void ProcessFoo(Foo& foo) {};
int main() { ProcessFoo(Foo(42)); return 0; }
Copier après la connexion

l'erreur se produit car le temporaire Foo(42 ) l'objet est transmis à un paramètre de référence non const (ProcessFoo(Foo& foo)). De par sa conception, C interdit cette pratique.

Solutions de contournement :

Les solutions de contournement suggérées atténuent le problème en :

  • Créer une variable temporaire : Assigner l'objet temporaire à une variable puis le passer en tant que référence :

    Foo foo42(42);
    ProcessFoo(foo42);
    Copier après la connexion
  • Utiliser une référence Const : Modifier ProcessFoo pour prendre une référence const (ProcessFoo(const Foo& foo)), ce qui lui permet d'accepter des objets :

    void ProcessFoo(const Foo& foo) {};
    ProcessFoo(Foo(42));
    Copier après la connexion
  • En passant Valeur : Permettre à ProcessFoo de recevoir l'objet par valeur (ProcessFoo(Foo foo)), ce qui évite la restriction de référence :

    void ProcessFoo(Foo foo) {};
    ProcessFoo(Foo(42));
    Copier après la connexion

Différence de compilateur :

La différence de comportement entre Microsoft Visual Studio et GNU C (g ) est probablement due à des paramètres par défaut différents. Par défaut, g impose une conformité plus stricte à la norme C, tandis que Visual Studio peut autoriser certains écarts. Cela peut entraîner la génération d'erreurs dans un compilateur mais pas dans l'autre.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal