• [^] # Re: Tableau

    Posté par (site web personnel) . En réponse au journal Tu souhaites apprendre à programmer en shell. Évalué à 2.

    Non. Tu fais ce que tu veux en C++. Tu n'es même pas obligé de passer par le système orienté objet si tu n'aimes pas.

    OK, mais là on parle de programmation en C++ pas d'un sous-ensemble de C++. Ta proposition de ne pas utiliser les classes est une façon parmi d'autres de choisir une stratégie pour répondre aux questions que je pose.

    Si tu programmes sans le côté orienté objet, cela ne va même pas te dispenser de la question des opérateurs de recopie et de la question de propriété d'une valeur transmise par poitneur ou par réfeŕence.

    Alors qu'en Bash, c'est tellement mieux : tu es obligé de déclarer une variable extérieure à ta fonction, …

    Ta fonction écrit sur stdout ou dans un fichier si c'est une valeur complexe ou renvoie un code de retour. Tu récupères la valeur avec '>' ou avec les backquotes pour les valeur complexes. Le shell ne sert pas à manipuler ces valeurs, il sert à coordonner le travail de plusieurs processus (en leur passant les valeurs).

    Ensuite, tu utilises tout un vocabulaire compliqué (« espace de stockage privé » ? Vraiment ?).

    Tu peux appeler comme tu veux, mais c'est le retour de std::string::c_str et std::string::data.

    Ensuite, n'importe quel codeur C (même pas C++) sait que dès que le type devient un peu complexe, il est préférable (le plus souvent, il y a toujours des exceptions bien entendu) de passer un paramètre par référence (donc par pointeur en C, pointeur ou de préférence référence en C++). Bref, tu as en gros trois choix pour le retour

    La différence avec ce que j'ai écrit est que tu as supprimé l'opération de recopie. Si tu passes un pointeur avec transfert de propriété et que tu veux continuer à travailler sur la valeur, il faut la recopier. Quelle que soit la façon dont tu résous le problème, tu n'as pas le droit de le passer sous silence.

    [passage des erreurs]
    Tu fais comme en C : tu utilises un entier/un enum pour le retour de ta fonction.

    Tu as déjà entendu parler de la variable [errno]? En C il n'y a pas de stratégie canonique de gérer les erreurs, en C++ c'est pire.

    Tu n'es pas obligé de passer par les exceptions.

    C'est une stratégie de réponse aux questions que je pose. En plus elle est mauvaise, parceque des fonctions de la bibliothèque standard lancent des exceptions, et des fonctions d'autres biliothèques peuvent le faire: on ne peut pas complètement ignorer les exceptions. Ensuite si tu veux programmer vaguement sérieusement, tu veux écrire des opérations transactionelles (ta structure est toujours dans un état bien défini où les invariants sont satisfaits).

    Tu n'es jamais obligé d'utiliser l'intégralité d'un langage

    Travailler avec un sous-ensemble de C++ est une stratégie de réponse aux questions que je pose.

    Mais quand on me dit qu'en Bash il est bien plus simple de déclarer des fonctions qu'en C++, je suis très moyennement d'accord.

    Tu n'es pas d'accord parceque dans tes explications, tu as complètement perdu de vue le problème de la gestion de la mémoire. Le protocole de gestion de la mémoire fait partie de la définition d'une fonction en C++. C'est une différence fondamentale entre le C++ et des langages de haut niveau ou le shell.