Maison > développement back-end > C++ > Pourquoi « auto » fonctionne-t-il avec des types privés alors que la déclaration explicite échoue ?

Pourquoi « auto » fonctionne-t-il avec des types privés alors que la déclaration explicite échoue ?

Mary-Kate Olsen
Libérer: 2024-12-16 00:57:09
original
653 Les gens l'ont consulté

Why Does 'auto' Work with Private Types While Explicit Declaration Fails?

Utilisation de 'auto' sur des types privés : accessibilité dévoilée

Lorsque vous travaillez avec des types privés au sein d'une classe, vous pouvez rencontrer une situation curieuse : en essayant de déclarer explicitement un La variable utilisant le nom du type entraîne une erreur, l'utilisation de « auto » pour déduire que le type semble fonctionner de manière transparente.

class Foo {
    struct Bar { int i; };
public:
    Bar Baz() { return Bar(); }
};
Copier après la connexion

Dans le code donné, Foo contient une barre de type imbriquée privée. L'exécution de la ligne suivante génère une erreur :

Foo::Bar b = f.Baz();  // error
Copier après la connexion

De façon inattendue, l'utilisation de « auto » résout le problème :

auto b = f.Baz();         // ok
Copier après la connexion

Pourquoi est-ce autorisé ?

La déduction de type « auto » et l'inférence de type de modèle partagent un mécanisme sous-jacent similaire. Dans ce cas, cela ressemble à la façon dont les fonctions de « modèle » peuvent fonctionner avec des types privés :

template <typename T>
void fun(T t) {}

int main() {
    Foo f;
    fun(f.Baz());         // ok
}
Copier après la connexion

Dévoilement de l'accessibilité

La possibilité de transmettre des objets de types privés à les fonctions de modèle ou l'utilisation de « auto » pour déduire leur type vient du fait que le type lui-même reste accessible, même si son nom est masqué. Le compilateur, grâce à la déduction de type, démêle la structure de l'objet, permettant son utilisation.

Par conséquent, même si le nom d'un type privé est inaccessible, ses informations de type sont toujours disponibles, permettant la manipulation via des mécanismes tels que 'auto ' ou déduction de modèle.

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