OVH Cloud OVH Cloud

Quels bouquins achetter ?

89 réponses
Avatar
Marc Boyer
Bon, je me décide enfin à compléter ma collection de bouquins
C++, histoire de pas poster ici à chaque fois que je redécouvre
la roue et que je me demande s'il vaut mieux lui mettre 8 ou 9
côtés.

Que me conseilleriez vous (vous qui voyez passer mes questions)?
J'ai déjà:
- TC++PL 3ed
- Moderne C++ Design
- The Design and Evolution of C++

Je pensais à:
- Exceptional C++
- Effective C++
- More Exceptional C++ : parce qu'il dit insister sur les traits
et l'usage de la STL

J'hésite sur:
- Essential C++ : je pense que c'est pour des plus débutants
- More Effective C++ : avec les 3 ci dessus, ça devrait
déjà être pas mal
- The Boost Graph Library : je dois faire quelques manips de
base sur les graphes, et je me demande si j'aurais
plus vite fait de tout recoder ou de me plonger dans Boost


Des commentaires ?

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

9 réponses

5 6 7 8 9
Avatar
Gabriel Dos Reis
writes:

| Ça donne bien l'air qu'ils considèrent la bibliothèque comme une partie
| integrante du langage.

Yep. Je suis toujours amusé quand les gens veulent faire une
distinction nette entre langage et bibliothèque C++. Le C++ forme un
tout. Il y a une partie de la bibliothèque qui est optionelle pour un
freestanding mais même dans ce cas, il y a quand même une partie des
chapitres 18 et 19.

-- Gaby
Avatar
Gabriel Dos Reis
Richard Delorme writes:

| Mais on ne peut pas faire :
|
| std::string s = "Salut" + ", Christophe !"

mais on peut écrire

std::string s = "Salut" /* + */ ", Christophe !";

| parce que les chaînes littérales sont des char[] et que l'opérateur + est
| défini pour les string, pas pour les char[]. Bref, en C++, il y a toujours
| un moment où les tableaux de char vous sautent à la figure et l'utilisation
| des string implique la connaissance des char[].

mais ce moment peut être différé au plus tard possible,

-- Gaby
Avatar
kanze
"Michel Michaud" wrote in message
news:<hiZpb.18793$...
Dans news:3fa7bab4$0$6967$, Richard
Néanmoins, on ne peut pas raisonnablement s'abstenir de la
connaissance du type char[] quand on manipule des chaînes en C++.
Par exemple, on peut faire :

std::string s = "Salut";
s = s + ", Christophe !";

Mais on ne peut pas faire :

std::string s = "Salut" + ", Christophe !"


Mais on peut faire s= "Salut, Christophe !"; (et = "Salut " "toi !")

Pour un exemple plus réaliste (variante sur un cas vu dans un de mes
cours tout juste hier).

Avec
string famille="...", prenom="...", nom;

1- Composez nom à partir du nom de famille suivi d'une virgule et
un espace, suivi de l'initiale du prénom.

nom= famille + ", " + prenom[0]; // OK...

2- Composez nom à partir de l'initiale du prénom suivi d'un point
et un espace, suivi du nom de famille.

nom= prenom[0] + ". " + famille; // Ça compile, mais c'est
// incorrect et un
// comportement
// indéfini ! Horreur !

Je crois qu'une solution générale serait qu'en C++ "..." soit de type
std::string et que ces constantes soient convertibles implicitement en
const char* au besoin. Pourquoi BS n'y a pas pensé ? J'imagine qu'il y
aurait un problème que je ne vois pas :-)


J'imagine qu'il y avait pensé. Mais comment est-ce que tu résous la
compatibilité C ?

N.B. Il y a évidemment plusieurs bonnes solutions au problème 2
ci-haut, mais la solution présentée « devrait » être correcte
et ne l'est pas. Le vrai problème est là...


Il y a plusieurs « vrais problèmes ». Pour commencer, le fait que
prenom[0] + ". " soit légal. Mais la compatibilité avec C n'est pas sans
un certain coût.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


Avatar
Christophe Lephay
Loïc Joly wrote:
Christophe Lephay wrote:
Un élément relativement objectif permettant de mesurer les
complexités relatives du core language et de la SL serait de
comparer les pages qui y sont respectivement consacrées dans la
norme. Je n'ai jamais eu la norme sous les yeux, mais je mettrais ma
main (la gauche, on sait jamais), que la description du core prend
plus de place que la description de la SL.


Core : 325 pages.
SL : 341 pages.

Mais je ne crois pas que ce soit une mesure de complexité appropriée.


Je suis d'accord dans la mesure où elle ne va pas dans mon sens ;)

Mais c'est toujours une indication, même si une mesure plus précise
prendrait en compte les références croisées, comme étant autant d'indices
d'un manque de modularité... :)

Chris


Avatar
Gabriel Dos Reis
writes:

[...]

| > Je crois qu'une solution générale serait qu'en C++ "..." soit de type
| > std::string et que ces constantes soient convertibles implicitement en
| > const char* au besoin. Pourquoi BS n'y a pas pensé ? J'imagine qu'il y
| > aurait un problème que je ne vois pas :-)
|
| J'imagine qu'il y avait pensé. Mais comment est-ce que tu résous la
| compatibilité C ?

ah, parce que la compatibilité C n'est pas déjà cassée ?

-- Gaby
Avatar
kanze
Gabriel Dos Reis wrote in message
news:...
writes:

[...]

| > Je crois qu'une solution générale serait qu'en C++ "..." soit de
| > type std::string et que ces constantes soient convertibles
| > implicitement en const char* au besoin. Pourquoi BS n'y a pas
| > pensé ? J'imagine qu'il y aurait un problème que je ne vois pas
| > :-)

| J'imagine qu'il y avait pensé. Mais comment est-ce que tu résous la
| compatibilité C ?

ah, parce que la compatibilité C n'est pas déjà cassée ?


Il y a des dégrées de compatibilité.

Il y a une longue histoire. Je ne sais pas quand la première classe de
chaîne est apparue, mais le langage lui-même n'en a pas depuis très
longtemps. Et si Stroustrup n'a pas créer un type intégré string depuis
le début, j'imagine que les raisons de compatibilité avec C jouait un
rôle (mais le mieux serait de lui le démander, si on tient réelement à
savoir).

Maintenant, évidemment, indépendamment du C, on a le problème de la
compatibilité avec le C++ existant ; je veux bien écouter des
propositions, mais je suis scéptique qu'on puisse faire quelque chose de
vraiment utile sans casser trop le code existant.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Avatar
Michel Michaud
Dans news:, Gabriel Dos
writes:

[...]

Je crois qu'une solution générale serait qu'en C++ "..." soit de
type std::string et que ces constantes soient convertibles
implicitement en const char* au besoin. Pourquoi BS n'y a pas
pensé ? J'imagine qu'il y aurait un problème que je ne vois pas
:-)


J'imagine qu'il y avait pensé. Mais comment est-ce que tu résous la
compatibilité C ?



Je ne vois pas ce message de James. Alors je pose ma question ici.
James, tu as un exemple d'incompatibilité qui serait brisée par ma
proposition ?

ah, parce que la compatibilité C n'est pas déjà cassée ?


Inutile d'en ajouter (c'est ce que j'essaie de proposer).

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/



Avatar
Gabriel Dos Reis
writes:

| Gabriel Dos Reis wrote in message
| news:...
| > writes:
|
| > [...]
|
| > | > Je crois qu'une solution générale serait qu'en C++ "..." soit de
| > | > type std::string et que ces constantes soient convertibles
| > | > implicitement en const char* au besoin. Pourquoi BS n'y a pas
| > | > pensé ? J'imagine qu'il y aurait un problème que je ne vois pas
| > | > :-)
|
| > | J'imagine qu'il y avait pensé. Mais comment est-ce que tu résous la
| > | compatibilité C ?
|
| > ah, parce que la compatibilité C n'est pas déjà cassée ?
|
| Il y a des dégrées de compatibilité.
|
| Il y a une longue histoire. Je ne sais pas quand la première classe de
| chaîne est apparue, mais le langage lui-même n'en a pas depuis très
| longtemps. Et si Stroustrup n'a pas créer un type intégré string depuis
| le début, j'imagine que les raisons de compatibilité avec C jouait un
| rôle (mais le mieux serait de lui le démander, si on tient réelement à
| savoir).

Je ne doute pas une seule seconde que l'option de type std::string
intégré au langage ait été considérée. Seulement, je doute que la
compatibilité avec le C ait été le facteur déterminant de son rejet.

-- Gaby
Avatar
kanze
"Michel Michaud" wrote in message
news:<xQsqb.6577$...
Dans news:, Gabriel Dos
writes:

[...]

Je crois qu'une solution générale serait qu'en C++ "..." soit de
type std::string et que ces constantes soient convertibles
implicitement en const char* au besoin. Pourquoi BS n'y a pas
pensé ? J'imagine qu'il y aurait un problème que je ne vois pas
:-)


J'imagine qu'il y avait pensé. Mais comment est-ce que tu résous la
compatibilité C ?



Je ne vois pas ce message de James. Alors je pose ma question ici.
James, tu as un exemple d'incompatibilité qui serait brisée par ma
proposition ?


Je n'ai pas étudié ta proposition en détail, mais je pensais plutôt aux
débuts : en C, quelque chose comme "..." à une signification bien
déterminée, et on aurait considéré qu'un tel changement s'en éloigner de
trop.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16




5 6 7 8 9