Pourquoi déconseiller std::string ou std::wstring ?
10 réponses
Stephane Wirtel
Bonjour à tous,
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou
std::wstring.
Hors le code sur lequel je travaille commence à devenir très hétérogène en ce qui
concerne l'utilisation de classes gérant des strings. Nous avons des std::string,
des std::wstring, des AnsiString et des WideStrings ( ces deux dernières sont
propres à Borland ).
On Mon, 04 Sep 2006 10:54:51 +0200, Stephane Wirtel :
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou std::wstring.
Uh ? T'es sûr ? Où as-tu vu ça ?
Alain Gaillard
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou std::wstring.
Comment ça déconseillé ??
Hors le code sur lequel je travaille commence à devenir très hétérogène en ce qui concerne l'utilisation de classes gérant des strings. Nous avons des std::string, des std::wstring, des AnsiString et des WideStrings ( ces deux dernières sont propres à Borland ).
Que me conseilleriez-vous ?
Les AnsiString de Borland sont un "héritage", si je peux parler ainsi, des chaînes étendues de Delphi. Mais je pense que ça ne devrait pas exister.
Selon moi utilier la librairie standard c'est toujours le mieux. Maintenant avec Borland tu vas devoir passer de std::string à AnsiString assez souvent. On peut y voir quelque chose de pénalisant questions performances. Cependant les AnsiString s'utilisent essentiellement dans le GUI, donc en terme de performances, ça ne va pas chercher bien loin.
Alors moi je préconiserais la librairie standard. Borland propose aussi des conteneurs mais je trouve que ça le fait pas.
-- Alain
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou
std::wstring.
Comment ça déconseillé ??
Hors le code sur lequel je travaille commence à devenir très hétérogène en ce qui
concerne l'utilisation de classes gérant des strings. Nous avons des std::string,
des std::wstring, des AnsiString et des WideStrings ( ces deux dernières sont
propres à Borland ).
Que me conseilleriez-vous ?
Les AnsiString de Borland sont un "héritage", si je peux parler ainsi,
des chaînes étendues de Delphi. Mais je pense que ça ne devrait pas exister.
Selon moi utilier la librairie standard c'est toujours le mieux.
Maintenant avec Borland tu vas devoir passer de std::string à AnsiString
assez souvent.
On peut y voir quelque chose de pénalisant questions performances.
Cependant les AnsiString s'utilisent essentiellement dans le GUI, donc
en terme de performances, ça ne va pas chercher bien loin.
Alors moi je préconiserais la librairie standard. Borland propose aussi
des conteneurs mais je trouve que ça le fait pas.
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou std::wstring.
Comment ça déconseillé ??
Hors le code sur lequel je travaille commence à devenir très hétérogène en ce qui concerne l'utilisation de classes gérant des strings. Nous avons des std::string, des std::wstring, des AnsiString et des WideStrings ( ces deux dernières sont propres à Borland ).
Que me conseilleriez-vous ?
Les AnsiString de Borland sont un "héritage", si je peux parler ainsi, des chaînes étendues de Delphi. Mais je pense que ça ne devrait pas exister.
Selon moi utilier la librairie standard c'est toujours le mieux. Maintenant avec Borland tu vas devoir passer de std::string à AnsiString assez souvent. On peut y voir quelque chose de pénalisant questions performances. Cependant les AnsiString s'utilisent essentiellement dans le GUI, donc en terme de performances, ça ne va pas chercher bien loin.
Alors moi je préconiserais la librairie standard. Borland propose aussi des conteneurs mais je trouve que ça le fait pas.
-- Alain
Stephane Wirtel
Fabien LE LEZ said the following on 4/09/2006 11:18:
On Mon, 04 Sep 2006 10:54:51 +0200, Stephane Wirtel :
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou std::wstring.
Uh ? T'es sûr ? Où as-tu vu ça ? J'ai souvent lû qu'il était déconseillé d'utiliser la std::string lorsqu'elle
devait être utilisée très fréquemment.
Sinon, je suis un partisant de l'utilisation de la STL et de la Boost.
En fait, j'ai un léger soucis dû à l'utilisation des trois classes pour gérer des chaines de caractères et j'aimerais uniformiser le tout en employant la STL si possible, mais je pensais qu'il était déconseillé d'employer notre amie std::string.
Fabien LE LEZ said the following on 4/09/2006 11:18:
On Mon, 04 Sep 2006 10:54:51 +0200, Stephane Wirtel
<com.descasoft@wirtel.stephane>:
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou
std::wstring.
Uh ? T'es sûr ? Où as-tu vu ça ?
J'ai souvent lû qu'il était déconseillé d'utiliser la std::string lorsqu'elle
devait être utilisée très fréquemment.
Sinon, je suis un partisant de l'utilisation de la STL et de la Boost.
En fait, j'ai un léger soucis dû à l'utilisation des trois classes pour gérer
des chaines de caractères et j'aimerais uniformiser le tout en employant la
STL si possible, mais je pensais qu'il était déconseillé d'employer notre amie
std::string.
Fabien LE LEZ said the following on 4/09/2006 11:18:
On Mon, 04 Sep 2006 10:54:51 +0200, Stephane Wirtel :
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou std::wstring.
Uh ? T'es sûr ? Où as-tu vu ça ? J'ai souvent lû qu'il était déconseillé d'utiliser la std::string lorsqu'elle
devait être utilisée très fréquemment.
Sinon, je suis un partisant de l'utilisation de la STL et de la Boost.
En fait, j'ai un léger soucis dû à l'utilisation des trois classes pour gérer des chaines de caractères et j'aimerais uniformiser le tout en employant la STL si possible, mais je pensais qu'il était déconseillé d'employer notre amie std::string.
Fabien LE LEZ
On Mon, 04 Sep 2006 10:54:51 +0200, Stephane Wirtel :
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou std::wstring.
Je dirais au contraire que int, std::string et std::vector<> sont trois types "par défaut" : si tu as besoin d'un nombre, d'une chaîne de caractères ou d'un tableau, tu choisiras un de ces trois types, sauf si tu as une bonne raison de faire autrement.
Hors
C'est étonnant, le nombre de gens qui écrivent "hors" alors qu'ils veulent dire "or"...
On Mon, 04 Sep 2006 10:54:51 +0200, Stephane Wirtel
<com.descasoft@wirtel.stephane>:
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou
std::wstring.
Je dirais au contraire que int, std::string et std::vector<> sont
trois types "par défaut" : si tu as besoin d'un nombre, d'une chaîne
de caractères ou d'un tableau, tu choisiras un de ces trois types,
sauf si tu as une bonne raison de faire autrement.
Hors
C'est étonnant, le nombre de gens qui écrivent "hors" alors qu'ils
veulent dire "or"...
On Mon, 04 Sep 2006 10:54:51 +0200, Stephane Wirtel :
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou std::wstring.
Je dirais au contraire que int, std::string et std::vector<> sont trois types "par défaut" : si tu as besoin d'un nombre, d'une chaîne de caractères ou d'un tableau, tu choisiras un de ces trois types, sauf si tu as une bonne raison de faire autrement.
Hors
C'est étonnant, le nombre de gens qui écrivent "hors" alors qu'ils veulent dire "or"...
Stephane Wirtel
Alain Gaillard said the following on 4/09/2006 11:20:
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou std::wstring.
Comment ça déconseillé ?? A moins que je me trompe, parfois j'ai lû qu'il était préférable d'utiliser
une autre implémentation que std::string, pour des problèmes d'allocation.
Les AnsiString de Borland sont un "héritage", si je peux parler ainsi, des chaînes étendues de Delphi. Mais je pense que ça ne devrait pas exister. Effectivement, les AnsiString sont un mapping qui se base sur le code de la VCL :|
Selon moi utilier la librairie standard c'est toujours le mieux. Chouette, je prône la même chose :d
Maintenant avec Borland tu vas devoir passer de std::string à AnsiString assez souvent. On peut y voir quelque chose de pénalisant questions performances. Cependant les AnsiString s'utilisent essentiellement dans le GUI, donc en terme de performances, ça ne va pas chercher bien loin.
Alors moi je préconiserais la librairie standard. Borland propose aussi des conteneurs mais je trouve que ça le fait pas.
En fait, nous avons des fonctions permettant de convertir des AnsiString -> std::string et vice-versa.
En gros, nous avons une DLL qui sert de noyau à des applications. Les applications sont écrites en Delphi ou en Java et le code du noyau est écrit avec c++ Builder. Hors les anciens développeurs ont souvent employés AnsiString, ou tout simplement des vieux char[]. Ce qui ne me plait pas c'est que nous avons plusieurs manières de gérer des strings, alors que nous pourrions employer des composants de la STL.
Les seuls endroits où nous utilisons des AnsiString ou WideString, c'est lors de l'utilisation de DBExpress, et de l'utilisation de l'API des applications clientes avec le noyau.
C'est vrai que c'est un gros bordel, mais nous essayons de nettoyer tout ce code qui pose parfois des problèmes uniquement à cause d'un manque de formalisme concernant les composants à employer.
Ce qui me plairait, c'est d'avoir le moins de dépendances envers Borland et de pouvoir compiler notre DLL avec gcc afin de porter l'histoire sous un autre OS.
Alain Gaillard said the following on 4/09/2006 11:20:
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou
std::wstring.
Comment ça déconseillé ??
A moins que je me trompe, parfois j'ai lû qu'il était préférable d'utiliser
une autre implémentation que std::string, pour des problèmes d'allocation.
Les AnsiString de Borland sont un "héritage", si je peux parler ainsi,
des chaînes étendues de Delphi. Mais je pense que ça ne devrait pas
exister.
Effectivement, les AnsiString sont un mapping qui se base sur le code de la VCL :|
Selon moi utilier la librairie standard c'est toujours le mieux.
Chouette, je prône la même chose :d
Maintenant avec Borland tu vas devoir passer de std::string à AnsiString
assez souvent.
On peut y voir quelque chose de pénalisant questions performances.
Cependant les AnsiString s'utilisent essentiellement dans le GUI, donc
en terme de performances, ça ne va pas chercher bien loin.
Alors moi je préconiserais la librairie standard. Borland propose aussi
des conteneurs mais je trouve que ça le fait pas.
En fait, nous avons des fonctions permettant de convertir des AnsiString ->
std::string
et vice-versa.
En gros, nous avons une DLL qui sert de noyau à des applications.
Les applications sont écrites en Delphi ou en Java et le code du noyau
est écrit avec c++ Builder.
Hors les anciens développeurs ont souvent employés AnsiString, ou tout simplement
des vieux char[]. Ce qui ne me plait pas c'est que nous avons plusieurs manières
de gérer des strings, alors que nous pourrions employer des composants de la STL.
Les seuls endroits où nous utilisons des AnsiString ou WideString, c'est lors
de l'utilisation de DBExpress, et de l'utilisation de l'API des applications
clientes avec le noyau.
C'est vrai que c'est un gros bordel, mais nous essayons de nettoyer tout ce code
qui pose parfois des problèmes uniquement à cause d'un manque de formalisme
concernant les composants à employer.
Ce qui me plairait, c'est d'avoir le moins de dépendances envers Borland
et de pouvoir compiler notre DLL avec gcc afin de porter l'histoire sous un
autre OS.
Alain Gaillard said the following on 4/09/2006 11:20:
Je lis parfois sur ce NG qu'il est déconseillé d'utiliser std::string ou std::wstring.
Comment ça déconseillé ?? A moins que je me trompe, parfois j'ai lû qu'il était préférable d'utiliser
une autre implémentation que std::string, pour des problèmes d'allocation.
Les AnsiString de Borland sont un "héritage", si je peux parler ainsi, des chaînes étendues de Delphi. Mais je pense que ça ne devrait pas exister. Effectivement, les AnsiString sont un mapping qui se base sur le code de la VCL :|
Selon moi utilier la librairie standard c'est toujours le mieux. Chouette, je prône la même chose :d
Maintenant avec Borland tu vas devoir passer de std::string à AnsiString assez souvent. On peut y voir quelque chose de pénalisant questions performances. Cependant les AnsiString s'utilisent essentiellement dans le GUI, donc en terme de performances, ça ne va pas chercher bien loin.
Alors moi je préconiserais la librairie standard. Borland propose aussi des conteneurs mais je trouve que ça le fait pas.
En fait, nous avons des fonctions permettant de convertir des AnsiString -> std::string et vice-versa.
En gros, nous avons une DLL qui sert de noyau à des applications. Les applications sont écrites en Delphi ou en Java et le code du noyau est écrit avec c++ Builder. Hors les anciens développeurs ont souvent employés AnsiString, ou tout simplement des vieux char[]. Ce qui ne me plait pas c'est que nous avons plusieurs manières de gérer des strings, alors que nous pourrions employer des composants de la STL.
Les seuls endroits où nous utilisons des AnsiString ou WideString, c'est lors de l'utilisation de DBExpress, et de l'utilisation de l'API des applications clientes avec le noyau.
C'est vrai que c'est un gros bordel, mais nous essayons de nettoyer tout ce code qui pose parfois des problèmes uniquement à cause d'un manque de formalisme concernant les composants à employer.
Ce qui me plairait, c'est d'avoir le moins de dépendances envers Borland et de pouvoir compiler notre DLL avec gcc afin de porter l'histoire sous un autre OS.
Stephane Wirtel
C'est étonnant, le nombre de gens qui écrivent "hors" alors qu'ils veulent dire "or"...
:d Pourtant je ne parle pas de métal ni en anglais :d
C'est étonnant, le nombre de gens qui écrivent "hors" alors qu'ils
veulent dire "or"...
:d Pourtant je ne parle pas de métal ni en anglais :d
C'est étonnant, le nombre de gens qui écrivent "hors" alors qu'ils veulent dire "or"...
:d Pourtant je ne parle pas de métal ni en anglais :d
Alain Gaillard
Ce qui me plairait, c'est d'avoir le moins de dépendances envers Borland et de pouvoir compiler notre DLL avec gcc afin de porter l'histoire sous un autre OS.
Ca paraît difficle. Il y a plein d'extention propriétaire dans C++ Builder. Toujours à cause de la VCL....
-- Alain
Ce qui me plairait, c'est d'avoir le moins de dépendances envers Borland
et de pouvoir compiler notre DLL avec gcc afin de porter l'histoire sous un
autre OS.
Ca paraît difficle. Il y a plein d'extention propriétaire dans C++
Builder. Toujours à cause de la VCL....
Ce qui me plairait, c'est d'avoir le moins de dépendances envers Borland et de pouvoir compiler notre DLL avec gcc afin de porter l'histoire sous un autre OS.
Ca paraît difficle. Il y a plein d'extention propriétaire dans C++ Builder. Toujours à cause de la VCL....
-- Alain
Fabien LE LEZ
On Mon, 04 Sep 2006 11:27:21 +0200, Stephane Wirtel :
J'ai souvent lû qu'il était déconseillé d'utiliser la std::string lorsqu'elle devait être utilisée très fréquemment.
Faut se méfier de ce qu'on lit ici ou là. En tout cas, je ne pense pas que ce genre de conneries ait été dite ici. Du moins, pas récemment.
On Mon, 04 Sep 2006 11:27:21 +0200, Stephane Wirtel :
J'ai souvent lû qu'il était déconseillé d'utiliser la std::string lorsqu'elle
devait être utilisée très fréquemment.
Faut se méfier de ce qu'on lit ici ou là. En tout cas, je ne pense pas
que ce genre de conneries ait été dite ici. Du moins, pas récemment.
On Mon, 04 Sep 2006 11:27:21 +0200, Stephane Wirtel :
J'ai souvent lû qu'il était déconseillé d'utiliser la std::string lorsqu'elle devait être utilisée très fréquemment.
Faut se méfier de ce qu'on lit ici ou là. En tout cas, je ne pense pas que ce genre de conneries ait été dite ici. Du moins, pas récemment.
Stephane Wirtel
Alain Gaillard said the following on 4/09/2006 11:41:
Ce qui me plairait, c'est d'avoir le moins de dépendances envers Borland et de pouvoir compiler notre DLL avec gcc afin de porter l'histoire sous un autre OS.
Ca paraît difficle. Il y a plein d'extention propriétaire dans C++ Builder. Toujours à cause de la VCL....
Il ne s'agit pas d'une DLL à but graphique, mais simplement d'une DLL qui fait office de controler et de model :|
En gros, on utilise toujours DBExpress pour travailler sur des DB, et les TDateTime mais je pense que l'utilisation de boost:date_time devrait m'aider à résoudre cette dépendance.
Les containers de borland ont été remplacés par des std::vector, std::list et Co.
Alain Gaillard said the following on 4/09/2006 11:41:
Ce qui me plairait, c'est d'avoir le moins de dépendances envers Borland
et de pouvoir compiler notre DLL avec gcc afin de porter l'histoire
sous un
autre OS.
Ca paraît difficle. Il y a plein d'extention propriétaire dans C++
Builder. Toujours à cause de la VCL....
Il ne s'agit pas d'une DLL à but graphique, mais simplement d'une DLL
qui fait office de controler et de model :|
En gros, on utilise toujours DBExpress pour travailler sur des DB,
et les TDateTime mais je pense que l'utilisation de boost:date_time
devrait m'aider à résoudre cette dépendance.
Les containers de borland ont été remplacés par des std::vector, std::list et Co.
Alain Gaillard said the following on 4/09/2006 11:41:
Ce qui me plairait, c'est d'avoir le moins de dépendances envers Borland et de pouvoir compiler notre DLL avec gcc afin de porter l'histoire sous un autre OS.
Ca paraît difficle. Il y a plein d'extention propriétaire dans C++ Builder. Toujours à cause de la VCL....
Il ne s'agit pas d'une DLL à but graphique, mais simplement d'une DLL qui fait office de controler et de model :|
En gros, on utilise toujours DBExpress pour travailler sur des DB, et les TDateTime mais je pense que l'utilisation de boost:date_time devrait m'aider à résoudre cette dépendance.
Les containers de borland ont été remplacés par des std::vector, std::list et Co.
Stephane Wirtel
Faut se méfier de ce qu'on lit ici ou là. En tout cas, je ne pense pas que ce genre de conneries ait été dite ici. Du moins, pas récemment.
Alors merci de m'avoir confirmer que je disais une connerie :d
Donc, faut manger et utiliser du std::string
Faut se méfier de ce qu'on lit ici ou là. En tout cas, je ne pense pas
que ce genre de conneries ait été dite ici. Du moins, pas récemment.
Alors merci de m'avoir confirmer que je disais une connerie :d