Maison >développement back-end >C++ >Peut-on déduire automatiquement des types privés en 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!