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

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

Barbara Streisand
Libérer: 2024-12-15 02:19:10
original
284 Les gens l'ont consulté

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

Passer un objet temporaire comme référence

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
}
Copier après la connexion

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);
Copier après la connexion

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)
{
}
Copier après la connexion

3. Passage par valeur

Autoriser la fonction à accepter l'objet par valeur :

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

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!

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