Maison >développement back-end >C++ >Peut-on déduire automatiquement des types privés en C ?

Peut-on déduire automatiquement des types privés en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-19 20:51:12115parcourir

Can `auto` Deduce Private Types in C  ?

Utiliser 'auto' sur des types privés

En C , il peut sembler contre-intuitif que l'on puisse utiliser 'auto' avec des types privés, comme démontré dans le code suivant :

class Foo {
    struct Bar { int i; };
public:
    Bar Baz() { return Bar(); }
};

Normalement, on s'attendrait à ce que la tentative d'accès au type privé 'Bar' directement (par exemple, Foo::Bar b = f.Baz();) entraînerait une erreur. Cependant, ce n'est pas le cas lors de l'utilisation de « auto » :

int main() {
    Foo f;
    auto b = f.Baz();         // ok
    std::cout << b.i;
}

Ce comportement est dû à la similitude entre les règles « auto » et la déduction de type modèle. De la même manière que les types privés peuvent être transmis aux fonctions de modèle :

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

int main() {
    Foo f;
    fun(f.Baz());         // ok
}

Cette capacité vient du fait que même si le nom d'un type privé peut être inaccessible, le type lui-même reste utilisable. Par conséquent, 'auto' est capable de déduire correctement le type et de l'attribuer à la variable 'b', bien qu'il s'agisse d'un type privé.

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!

Déclaration:
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