"Michel Michaud" writes:Dans news:, GabrielExcuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en
prétendant que le code devient ainsi correct fait un raisonnement
stupide qui ne peut provenir d'un professionnel ; ou alors c'est
un
En pratique (ce qui est souvent le point de vue de James), je
ne sais pas si stupide est la seule possibilité :-) En fait,
En pratique les bibliothèques offrent maintenant des [] qui valident
l'accès. Alors en pratique, cela va marcher les jours pairs de
pleine lune. C'est ça un programme correct raisonné et écrit par un
professionnel ?
"Michel Michaud" <mm@gdzid.com> writes:
Dans news:m3y8toljvg.fsf@uniton.integrable-solutions.net, Gabriel
Excuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en
prétendant que le code devient ainsi correct fait un raisonnement
stupide qui ne peut provenir d'un professionnel ; ou alors c'est
un
En pratique (ce qui est souvent le point de vue de James), je
ne sais pas si stupide est la seule possibilité :-) En fait,
En pratique les bibliothèques offrent maintenant des [] qui valident
l'accès. Alors en pratique, cela va marcher les jours pairs de
pleine lune. C'est ça un programme correct raisonné et écrit par un
professionnel ?
"Michel Michaud" writes:Dans news:, GabrielExcuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en
prétendant que le code devient ainsi correct fait un raisonnement
stupide qui ne peut provenir d'un professionnel ; ou alors c'est
un
En pratique (ce qui est souvent le point de vue de James), je
ne sais pas si stupide est la seule possibilité :-) En fait,
En pratique les bibliothèques offrent maintenant des [] qui valident
l'accès. Alors en pratique, cela va marcher les jours pairs de
pleine lune. C'est ça un programme correct raisonné et écrit par un
professionnel ?
James Kanze writes:
| Gabriel Dos Reis writes:
| |> James Kanze writes:
| |> | Gabriel Dos Reis writes:
| |> | |> "Michel Michaud" writes:
| |> | |> | Dans news:, Benoît
| |> | |> | > Vincent Richard
| |> | |> | > a
| |> | |> | >> &(mon_vecteur[i])
| |> | |> | > Est-ce que &(mon_vecteur[0]) peut être considéré comme
| |> | |> | > l'adresse d'un tableau C contenant les éléments du
| |> | |> | > vecteur ? (toujours avec les mêmes précautions : pas
| |> | |> | > de modifications du vecteur, etc.)
| |> | |> | Oui, en autant que les éléments auxquels tu fais
| |> | |> | référence existent. Ce n'était pas tout à fait garanti
| |> | |> | par la norme, mais ça l'est maintenant.
| |> | |> Mais je ne vois toujours pas l'intérêt ici de préférer
| |> | |> v[i] à v.at(i).
| |> | Parce que dans la pratique, il ne lève pas d'exception ?
| |> Et alors ?
| C'est une raison potentielle. Il y a bien des moments où il faut
| savoir qu'une fonction ne lève pas d'exception -- sinon, le code
| correct n'est pas possible.
Et dans ce cas précis, le code ne devient pas subitement correct parce
que tu as remplacé v.at(i) par v[i]. Si, v,ay(i) lève une exception,
c'est que i n'est pas une bonne valeur pour indexer le tableau. C'est
simple.
| |> Tu raisonnes comme les élèves qui se contentent de mettre leurs
| |> programmes en commentaire... parce que le compilateur leur a dit
| |> qu'il y avait une erreur de syntaxe.
| Ou comme un professionnel qui doit écrire du code qui marche avec
| des compilateurs réels.
Excuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en prétendant
que le code devient ainsi correct fait un raisonnement stupide qui ne
peut provenir d'un professionnel ; ou alors c'est un professionnel
qu'il faut vite enlever du circuit parce qu'il représente un vrai
danger public.
Ce n'est pas une question de garantie donnée par la norme. Le fait que
v.at(i) lève une exception indique un problème avec la valeur i ou
l'indexation. Écrire v[i] ne rend pas le code plus correct.
Et dans la vie concrète, tu vas tomber sur des bibliothèques qui font
quand même du range checking pouor v[i].
James Kanze <kanze@alex.gabi-soft.fr> writes:
| Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
| |> James Kanze <kanze@alex.gabi-soft.fr> writes:
| |> | Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
| |> | |> "Michel Michaud" <mm@gdzid.com> writes:
| |> | |> | Dans news:87y8tpwyag.fsf@free.fr, Benoît
| |> | |> | > Vincent Richard
| |> | |> | > <chere-loque.MARRE-DE-LA-PUB@wanadoo.fr.invalid> a
| |> | |> | >> &(mon_vecteur[i])
| |> | |> | > Est-ce que &(mon_vecteur[0]) peut être considéré comme
| |> | |> | > l'adresse d'un tableau C contenant les éléments du
| |> | |> | > vecteur ? (toujours avec les mêmes précautions : pas
| |> | |> | > de modifications du vecteur, etc.)
| |> | |> | Oui, en autant que les éléments auxquels tu fais
| |> | |> | référence existent. Ce n'était pas tout à fait garanti
| |> | |> | par la norme, mais ça l'est maintenant.
| |> | |> Mais je ne vois toujours pas l'intérêt ici de préférer
| |> | |> v[i] à v.at(i).
| |> | Parce que dans la pratique, il ne lève pas d'exception ?
| |> Et alors ?
| C'est une raison potentielle. Il y a bien des moments où il faut
| savoir qu'une fonction ne lève pas d'exception -- sinon, le code
| correct n'est pas possible.
Et dans ce cas précis, le code ne devient pas subitement correct parce
que tu as remplacé v.at(i) par v[i]. Si, v,ay(i) lève une exception,
c'est que i n'est pas une bonne valeur pour indexer le tableau. C'est
simple.
| |> Tu raisonnes comme les élèves qui se contentent de mettre leurs
| |> programmes en commentaire... parce que le compilateur leur a dit
| |> qu'il y avait une erreur de syntaxe.
| Ou comme un professionnel qui doit écrire du code qui marche avec
| des compilateurs réels.
Excuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en prétendant
que le code devient ainsi correct fait un raisonnement stupide qui ne
peut provenir d'un professionnel ; ou alors c'est un professionnel
qu'il faut vite enlever du circuit parce qu'il représente un vrai
danger public.
Ce n'est pas une question de garantie donnée par la norme. Le fait que
v.at(i) lève une exception indique un problème avec la valeur i ou
l'indexation. Écrire v[i] ne rend pas le code plus correct.
Et dans la vie concrète, tu vas tomber sur des bibliothèques qui font
quand même du range checking pouor v[i].
James Kanze writes:
| Gabriel Dos Reis writes:
| |> James Kanze writes:
| |> | Gabriel Dos Reis writes:
| |> | |> "Michel Michaud" writes:
| |> | |> | Dans news:, Benoît
| |> | |> | > Vincent Richard
| |> | |> | > a
| |> | |> | >> &(mon_vecteur[i])
| |> | |> | > Est-ce que &(mon_vecteur[0]) peut être considéré comme
| |> | |> | > l'adresse d'un tableau C contenant les éléments du
| |> | |> | > vecteur ? (toujours avec les mêmes précautions : pas
| |> | |> | > de modifications du vecteur, etc.)
| |> | |> | Oui, en autant que les éléments auxquels tu fais
| |> | |> | référence existent. Ce n'était pas tout à fait garanti
| |> | |> | par la norme, mais ça l'est maintenant.
| |> | |> Mais je ne vois toujours pas l'intérêt ici de préférer
| |> | |> v[i] à v.at(i).
| |> | Parce que dans la pratique, il ne lève pas d'exception ?
| |> Et alors ?
| C'est une raison potentielle. Il y a bien des moments où il faut
| savoir qu'une fonction ne lève pas d'exception -- sinon, le code
| correct n'est pas possible.
Et dans ce cas précis, le code ne devient pas subitement correct parce
que tu as remplacé v.at(i) par v[i]. Si, v,ay(i) lève une exception,
c'est que i n'est pas une bonne valeur pour indexer le tableau. C'est
simple.
| |> Tu raisonnes comme les élèves qui se contentent de mettre leurs
| |> programmes en commentaire... parce que le compilateur leur a dit
| |> qu'il y avait une erreur de syntaxe.
| Ou comme un professionnel qui doit écrire du code qui marche avec
| des compilateurs réels.
Excuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en prétendant
que le code devient ainsi correct fait un raisonnement stupide qui ne
peut provenir d'un professionnel ; ou alors c'est un professionnel
qu'il faut vite enlever du circuit parce qu'il représente un vrai
danger public.
Ce n'est pas une question de garantie donnée par la norme. Le fait que
v.at(i) lève une exception indique un problème avec la valeur i ou
l'indexation. Écrire v[i] ne rend pas le code plus correct.
Et dans la vie concrète, tu vas tomber sur des bibliothèques qui font
quand même du range checking pouor v[i].
Dans news:, Gabriel DosExcuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en
prétendant que le code devient ainsi correct fait un raisonnement
stupide qui ne peut provenir d'un professionnel ; ou alors c'est un
En pratique (ce qui est souvent le point de vue de James), je
ne sais pas si stupide est la seule possibilité :-) En fait,
je pense à quelque chose du genre de
void MonSuperTriSurTableauDeInt(int* debut, int* fin);
vector<int> v;
// ...
// Il y a maintenant >= nbElem dans mon v, mais je veux
// trier nbElem au maximum
MonSuperTriSurTableauDeInt(&v[0], &v[nbElem]);
S'il y a exactement nbElem, at(nbElem) lève une exception avant qu'on
puisse en prendre l'adresse... Avec [nbElem], c'est moins dangereux
(bien que risqué en C++).
Ceci dit, je règlerais le problème avec (&v.at(0) + nbElem), mais
c'est une autre histoire.
Je ne dis pas que l'un de vous deux a raison et l'autre non, je n'ai
pas d'avis pour le moment :-) Sauf que je n'aime pas « at » en
général, j'aurais vraiment préféré [] avec validation et at pour
optimisation. Dans ce cas, j'ai l'impression que vous seriez peut-être
d'accord pour utiliser []...
Dans news:m3y8toljvg.fsf@uniton.integrable-solutions.net, Gabriel Dos
Excuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en
prétendant que le code devient ainsi correct fait un raisonnement
stupide qui ne peut provenir d'un professionnel ; ou alors c'est un
En pratique (ce qui est souvent le point de vue de James), je
ne sais pas si stupide est la seule possibilité :-) En fait,
je pense à quelque chose du genre de
void MonSuperTriSurTableauDeInt(int* debut, int* fin);
vector<int> v;
// ...
// Il y a maintenant >= nbElem dans mon v, mais je veux
// trier nbElem au maximum
MonSuperTriSurTableauDeInt(&v[0], &v[nbElem]);
S'il y a exactement nbElem, at(nbElem) lève une exception avant qu'on
puisse en prendre l'adresse... Avec [nbElem], c'est moins dangereux
(bien que risqué en C++).
Ceci dit, je règlerais le problème avec (&v.at(0) + nbElem), mais
c'est une autre histoire.
Je ne dis pas que l'un de vous deux a raison et l'autre non, je n'ai
pas d'avis pour le moment :-) Sauf que je n'aime pas « at » en
général, j'aurais vraiment préféré [] avec validation et at pour
optimisation. Dans ce cas, j'ai l'impression que vous seriez peut-être
d'accord pour utiliser []...
Dans news:, Gabriel DosExcuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en
prétendant que le code devient ainsi correct fait un raisonnement
stupide qui ne peut provenir d'un professionnel ; ou alors c'est un
En pratique (ce qui est souvent le point de vue de James), je
ne sais pas si stupide est la seule possibilité :-) En fait,
je pense à quelque chose du genre de
void MonSuperTriSurTableauDeInt(int* debut, int* fin);
vector<int> v;
// ...
// Il y a maintenant >= nbElem dans mon v, mais je veux
// trier nbElem au maximum
MonSuperTriSurTableauDeInt(&v[0], &v[nbElem]);
S'il y a exactement nbElem, at(nbElem) lève une exception avant qu'on
puisse en prendre l'adresse... Avec [nbElem], c'est moins dangereux
(bien que risqué en C++).
Ceci dit, je règlerais le problème avec (&v.at(0) + nbElem), mais
c'est une autre histoire.
Je ne dis pas que l'un de vous deux a raison et l'autre non, je n'ai
pas d'avis pour le moment :-) Sauf que je n'aime pas « at » en
général, j'aurais vraiment préféré [] avec validation et at pour
optimisation. Dans ce cas, j'ai l'impression que vous seriez peut-être
d'accord pour utiliser []...
"Michel Michaud" writes:
| Dans news:, Gabriel Dos
| > "Michel Michaud" writes:
| >> Dans news:, Gabriel
| >>> Excuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en
| >>> prétendant que le code devient ainsi correct fait un
| >>> raisonnement stupide qui ne peut provenir d'un professionnel ;
| >>> ou alors c'est un
| >> En pratique (ce qui est souvent le point de vue de James), je ne
| >> sais pas si stupide est la seule possibilité :-) En fait,
| > En pratique les bibliothèques offrent maintenant des [] qui
| > valident l'accès. Alors en pratique, cela va marcher les jours
| > pairs de pleine lune. C'est ça un programme correct raisonné et
| > écrit par un professionnel ?
| Si c'est le cas non évidemment. Mais si le code ne fonctionne qu'avec
| [], qu'il n'y a pas d'alternative,
(1) si le code ne fonctionne qu'avec [] et pas at(), il y a un
problème fondamental avec le programme;
(2) ici, il y aune alternative.
"Michel Michaud" <mm@gdzid.com> writes:
| Dans news:m3brqkjvf0.fsf@uniton.integrable-solutions.net, Gabriel Dos
| > "Michel Michaud" <mm@gdzid.com> writes:
| >> Dans news:m3y8toljvg.fsf@uniton.integrable-solutions.net, Gabriel
| >>> Excuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en
| >>> prétendant que le code devient ainsi correct fait un
| >>> raisonnement stupide qui ne peut provenir d'un professionnel ;
| >>> ou alors c'est un
| >> En pratique (ce qui est souvent le point de vue de James), je ne
| >> sais pas si stupide est la seule possibilité :-) En fait,
| > En pratique les bibliothèques offrent maintenant des [] qui
| > valident l'accès. Alors en pratique, cela va marcher les jours
| > pairs de pleine lune. C'est ça un programme correct raisonné et
| > écrit par un professionnel ?
| Si c'est le cas non évidemment. Mais si le code ne fonctionne qu'avec
| [], qu'il n'y a pas d'alternative,
(1) si le code ne fonctionne qu'avec [] et pas at(), il y a un
problème fondamental avec le programme;
(2) ici, il y aune alternative.
"Michel Michaud" writes:
| Dans news:, Gabriel Dos
| > "Michel Michaud" writes:
| >> Dans news:, Gabriel
| >>> Excuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en
| >>> prétendant que le code devient ainsi correct fait un
| >>> raisonnement stupide qui ne peut provenir d'un professionnel ;
| >>> ou alors c'est un
| >> En pratique (ce qui est souvent le point de vue de James), je ne
| >> sais pas si stupide est la seule possibilité :-) En fait,
| > En pratique les bibliothèques offrent maintenant des [] qui
| > valident l'accès. Alors en pratique, cela va marcher les jours
| > pairs de pleine lune. C'est ça un programme correct raisonné et
| > écrit par un professionnel ?
| Si c'est le cas non évidemment. Mais si le code ne fonctionne qu'avec
| [], qu'il n'y a pas d'alternative,
(1) si le code ne fonctionne qu'avec [] et pas at(), il y a un
problème fondamental avec le programme;
(2) ici, il y aune alternative.
writes:
| > | |> Tu raisonnes comme les élèves qui se contentent de mettre leurs
| > | |> programmes en commentaire... parce que le compilateur leur a dit
| > | |> qu'il y avait une erreur de syntaxe.
|
| > | Ou comme un professionnel qui doit écrire du code qui marche avec
| > | des compilateurs réels.
|
| > Excuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en prétendant
| > que le code devient ainsi correct fait un raisonnement stupide qui ne
| > peut provenir d'un professionnel ; ou alors c'est un professionnel
| > qu'il faut vite enlever du circuit parce qu'il représente un vrai
| > danger public.
|
| Tout à fait, et ce n'est pas ce que je voulais dire.
Alors, je pousse un grand OUF, et je suis rassuré.
-- Gaby
kanze@gabi-soft.fr writes:
| > | |> Tu raisonnes comme les élèves qui se contentent de mettre leurs
| > | |> programmes en commentaire... parce que le compilateur leur a dit
| > | |> qu'il y avait une erreur de syntaxe.
|
| > | Ou comme un professionnel qui doit écrire du code qui marche avec
| > | des compilateurs réels.
|
| > Excuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en prétendant
| > que le code devient ainsi correct fait un raisonnement stupide qui ne
| > peut provenir d'un professionnel ; ou alors c'est un professionnel
| > qu'il faut vite enlever du circuit parce qu'il représente un vrai
| > danger public.
|
| Tout à fait, et ce n'est pas ce que je voulais dire.
Alors, je pousse un grand OUF, et je suis rassuré.
-- Gaby
writes:
| > | |> Tu raisonnes comme les élèves qui se contentent de mettre leurs
| > | |> programmes en commentaire... parce que le compilateur leur a dit
| > | |> qu'il y avait une erreur de syntaxe.
|
| > | Ou comme un professionnel qui doit écrire du code qui marche avec
| > | des compilateurs réels.
|
| > Excuse-moi, mais quelqu'un qui remplace v.at(i) par v[i] en prétendant
| > que le code devient ainsi correct fait un raisonnement stupide qui ne
| > peut provenir d'un professionnel ; ou alors c'est un professionnel
| > qu'il faut vite enlever du circuit parce qu'il représente un vrai
| > danger public.
|
| Tout à fait, et ce n'est pas ce que je voulais dire.
Alors, je pousse un grand OUF, et je suis rassuré.
-- Gaby
Mais je n'apprécie pas que Michel puisse penser que je pourrais être
assez amateur pour écrire quelque chose du genre &v[nbElem]
simplement parce que je savais que mon implémentation (aujourd'hui)
n'effectuait pas de vérification.
Mais je n'apprécie pas que Michel puisse penser que je pourrais être
assez amateur pour écrire quelque chose du genre &v[nbElem]
simplement parce que je savais que mon implémentation (aujourd'hui)
n'effectuait pas de vérification.
Mais je n'apprécie pas que Michel puisse penser que je pourrais être
assez amateur pour écrire quelque chose du genre &v[nbElem]
simplement parce que je savais que mon implémentation (aujourd'hui)
n'effectuait pas de vérification.