Je pense que venir du Python vers le C++ demande beaucoup plus d'effort que cela en a l'air. Le C++ met en place un framework objet autour du C mais nous permet encore d'accéder, tel le C, au produit de notre code. Ce n'est pas une interface d'abstraction (et c'est tant mieux comme çà). Cela redemande de savoir comment fonctionne un ordinateur, ce qui se perd un peu de nos jours. Donc:
- "Chaine", en C comme en C++, se réfère à un bloc de texte codé en dur dans ton programme. Tu obtiens donc un pointeur vers une chaîne qui se trouve en mémoire read-only. C'est donc une expression de type « const char * ». Si le C est assez lâche, le C++ est beaucoup plus strict en ce qui concerne le typage.
- string, ou plus précisément std::string, n'est pas du tout un type natif mais un objet d'une bibliothèque bien définie, la STL. C'est donc une classe évoluée, qui n'a rien à voir avec un type natif tel qu'un pointeur (lequel étant implicitement défini par l'usage des guillemets).
- C++ est suffisament versatile pour te permettre de lancer n'importe quoi, parce que cela colle au paradigme objet (d'autres langages peuvent t'imposer des restrictions tel que le type d'objet à lancer), mais si tu tiens à utiliser la STL, autant le faire jusqu'au bout en dérivant la classe « exception » et en redéfinissant la méthode what() (qui renvoie un const char *, d'ailleurs). Ensuite tu rattrapes une seule fois « exception », et tu prendras dans tes filets tout ce qui en dérive.
- Pourquoi colles-tu « return false; » dans ton if si tu lances une exception à la ligne d'avant ? Celle-ci, par définition, ne reviendra pas.
- Lorsque j'écris une bibliothèque, j'utilise également les noms pleinement qualifiés dans un souci de rectitude. Mais si tu comptes utiliser souvent les objets de la STL, je te conseille de placer « using namespace std; » en tête de ton listing. Cela t'épargnera l'usage des « std:: » à chaque coin de ligne et te fera gagner énormément en temps et en lisibilité.
[^] # Re: Oubli
Posté par Obsidian . En réponse au message Déclencher et capturer une exception. Évalué à 3.
catch (const char *p) { cerr << p << endl; }
Je pense que venir du Python vers le C++ demande beaucoup plus d'effort que cela en a l'air. Le C++ met en place un framework objet autour du C mais nous permet encore d'accéder, tel le C, au produit de notre code. Ce n'est pas une interface d'abstraction (et c'est tant mieux comme çà). Cela redemande de savoir comment fonctionne un ordinateur, ce qui se perd un peu de nos jours. Donc:
- "Chaine", en C comme en C++, se réfère à un bloc de texte codé en dur dans ton programme. Tu obtiens donc un pointeur vers une chaîne qui se trouve en mémoire read-only. C'est donc une expression de type « const char * ». Si le C est assez lâche, le C++ est beaucoup plus strict en ce qui concerne le typage.
- string, ou plus précisément std::string, n'est pas du tout un type natif mais un objet d'une bibliothèque bien définie, la STL. C'est donc une classe évoluée, qui n'a rien à voir avec un type natif tel qu'un pointeur (lequel étant implicitement défini par l'usage des guillemets).
- C++ est suffisament versatile pour te permettre de lancer n'importe quoi, parce que cela colle au paradigme objet (d'autres langages peuvent t'imposer des restrictions tel que le type d'objet à lancer), mais si tu tiens à utiliser la STL, autant le faire jusqu'au bout en dérivant la classe « exception » et en redéfinissant la méthode what() (qui renvoie un const char *, d'ailleurs). Ensuite tu rattrapes une seule fois « exception », et tu prendras dans tes filets tout ce qui en dérive.
- Pourquoi colles-tu « return false; » dans ton if si tu lances une exception à la ligne d'avant ? Celle-ci, par définition, ne reviendra pas.
- Lorsque j'écris une bibliothèque, j'utilise également les noms pleinement qualifiés dans un souci de rectitude. Mais si tu comptes utiliser souvent les objets de la STL, je te conseille de placer « using namespace std; » en tête de ton listing. Cela t'épargnera l'usage des « std:: » à chaque coin de ligne et te fera gagner énormément en temps et en lisibilité.