Maison  >  Article  >  développement back-end  >  Pourquoi une boucle for basée sur une plage échoue-t-elle lorsqu'elle est utilisée sur un tableau transmis à une fonction non principale en C ?

Pourquoi une boucle for basée sur une plage échoue-t-elle lorsqu'elle est utilisée sur un tableau transmis à une fonction non principale en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-25 02:15:29986parcourir

Why does a range-based for-loop fail when used on an array passed to a non-main function in C  ?

Boucle For basée sur une plage sur un tableau transmis à une fonction non principale

Question :

Dans un projet C, une tentative d'utilisation d'une boucle for basée sur une plage sur un tableau passé à une fonction non principale échoue. Le code renvoie une erreur concernant l'impossibilité de trouver un appel de fonction correspondant pour start(int*&) lors de la tentative d'accès à la boucle for basée sur la plage dans la fonction non principale.

Réponse :

Lorsque vous transmettez un tableau à une fonction non principale, le tableau se désintègre en un pointeur, perdant des informations cruciales sur sa taille. Pour activer la boucle for basée sur une plage dans la fonction non principale :

  1. Utiliser la référence du tableau : Transmettez le tableau par référence au lieu d'un pointeur. Cela préserve les informations de taille :

    <code class="cpp">void foo(int (&&bar)[3]);</code>
  2. Approche générique : Utilisez un modèle de fonction avec un paramètre de modèle spécifiant la taille du tableau. Cette approche permet de transmettre différentes tailles de tableau :

    <code class="cpp">template <std::size_t array_size>
    void foo(int (&&bar)[array_size]);</code>

En préservant les informations de taille, la boucle for basée sur la plage peut parcourir correctement les éléments du tableau dans le non- fonction principale.

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