Dans news:,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.
Alors tu apprécieras de savoir que ce n'est pas ce que j'ai dit.
J'ai dit que s'il n'y a pas d'alternative (et je parlais en général,
pas seulement de [] vs at), tu vas choisir ce qui fonctionne plutôt
que ce qui serait mieux mais ne fonctionne pas. C'est ce que j'ai
compris de ton choix <iostream.h> vs <iostream> entre autres. Tu dois
t'arranger pour que tes programmes fonctionnent parfaitement, avec les
limites et les possibilités des outils mis à ta disposition. Je fais
erreur ?
Dans news:d6652001.0312080643.351e9fce@posting.google.com,
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.
Alors tu apprécieras de savoir que ce n'est pas ce que j'ai dit.
J'ai dit que s'il n'y a pas d'alternative (et je parlais en général,
pas seulement de [] vs at), tu vas choisir ce qui fonctionne plutôt
que ce qui serait mieux mais ne fonctionne pas. C'est ce que j'ai
compris de ton choix <iostream.h> vs <iostream> entre autres. Tu dois
t'arranger pour que tes programmes fonctionnent parfaitement, avec les
limites et les possibilités des outils mis à ta disposition. Je fais
erreur ?
Dans news:,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.
Alors tu apprécieras de savoir que ce n'est pas ce que j'ai dit.
J'ai dit que s'il n'y a pas d'alternative (et je parlais en général,
pas seulement de [] vs at), tu vas choisir ce qui fonctionne plutôt
que ce qui serait mieux mais ne fonctionne pas. C'est ce que j'ai
compris de ton choix <iostream.h> vs <iostream> entre autres. Tu dois
t'arranger pour que tes programmes fonctionnent parfaitement, avec les
limites et les possibilités des outils mis à ta disposition. Je fais
erreur ?
De point de vue de l'exception safety, c'est beaucoup moins
dangereux. Parce qu'avec les bibliothèques dont je me sers
professionnellement actuellement, [nbElem] provoque un échec d'une
assertion. Pas de problème d'exception safety, mais ce n'est pas
une solution pratique pour que l'application marche non plus.
Dans mes propres classes de tableau, il y a actuellement trois
possibilités prévues :
[] échec de l'assertion en cas d'erreur
at() exception en cas d'erreur, et
unsafeAt() pas de vérification, pour le cas où le profiler dit
qu'il faut.
De point de vue de l'exception safety, c'est beaucoup moins
dangereux. Parce qu'avec les bibliothèques dont je me sers
professionnellement actuellement, [nbElem] provoque un échec d'une
assertion. Pas de problème d'exception safety, mais ce n'est pas
une solution pratique pour que l'application marche non plus.
Dans mes propres classes de tableau, il y a actuellement trois
possibilités prévues :
[] échec de l'assertion en cas d'erreur
at() exception en cas d'erreur, et
unsafeAt() pas de vérification, pour le cas où le profiler dit
qu'il faut.
De point de vue de l'exception safety, c'est beaucoup moins
dangereux. Parce qu'avec les bibliothèques dont je me sers
professionnellement actuellement, [nbElem] provoque un échec d'une
assertion. Pas de problème d'exception safety, mais ce n'est pas
une solution pratique pour que l'application marche non plus.
Dans mes propres classes de tableau, il y a actuellement trois
possibilités prévues :
[] échec de l'assertion en cas d'erreur
at() exception en cas d'erreur, et
unsafeAt() pas de vérification, pour le cas où le profiler dit
qu'il faut.
Dans news:,De point de vue de l'exception safety, c'est beaucoup moins
dangereux. Parce qu'avec les bibliothèques dont je me sers
professionnellement actuellement, [nbElem] provoque un échec d'une
assertion. Pas de problème d'exception safety, mais ce n'est pas une
solution pratique pour que l'application marche non plus.
Est-ce que faire un assert est vraiment permis (dans un mode
production, en particulier) ?
Il me semble que la norme donne des garanties sur un certain nombre de
choses, par exemple sur l'existence des éléments alloués. Même si je
ne vois comment faire autrement), il me semble que ceci ne devrait pas
donner d'erreur (d'aucune sorte), en ce sens qu'il s'agit d'un code
vraiment sans danger :
vector<int> v;
v.reserve(100);
int* premier= &v[0];
int* dernier= &v[99];
Les pointeurs premier et dernier pourraient être utiles pour une
raison ou une autre. On ne voudrait probablement jamais les
déréférencer. De toute façon, *premier et *dernier devrait être sans
danger, même si on ne remplit pas le vecteur. Le processeur ne peut
pas détecter des adresses illégales, car elles sont dans une zone de
mémoire vraiment allouée.
[...]Dans mes propres classes de tableau, il y a actuellement trois
possibilités prévues :
[] échec de l'assertion en cas d'erreur
at() exception en cas d'erreur, et
unsafeAt() pas de vérification, pour le cas où le profiler dit
qu'il faut.
Je sais bien que nous n'avons pas la même définition de « assert »,
mais si ton []/assert détecte quelque chose, c'est qu'il y a une
erreur dans ton programme non ?
Ne serait-ce pas mieux que ton [] lève une exception (genre du type
EncoreUnBogue), que tu pourrais capter afin de ne pas simplement
laisser le programme s'arrêter ?
En fait, pour mes élèves, en mode debug, [] fait comme at. Je trouve
que c'est raisonnable. Vraiment si on a le moindre doute, je crois
qu'il faut utiliser at... et capter les exceptions !
Dans news:d6652001.0312080638.12483536@posting.google.com,
De point de vue de l'exception safety, c'est beaucoup moins
dangereux. Parce qu'avec les bibliothèques dont je me sers
professionnellement actuellement, [nbElem] provoque un échec d'une
assertion. Pas de problème d'exception safety, mais ce n'est pas une
solution pratique pour que l'application marche non plus.
Est-ce que faire un assert est vraiment permis (dans un mode
production, en particulier) ?
Il me semble que la norme donne des garanties sur un certain nombre de
choses, par exemple sur l'existence des éléments alloués. Même si je
ne vois comment faire autrement), il me semble que ceci ne devrait pas
donner d'erreur (d'aucune sorte), en ce sens qu'il s'agit d'un code
vraiment sans danger :
vector<int> v;
v.reserve(100);
int* premier= &v[0];
int* dernier= &v[99];
Les pointeurs premier et dernier pourraient être utiles pour une
raison ou une autre. On ne voudrait probablement jamais les
déréférencer. De toute façon, *premier et *dernier devrait être sans
danger, même si on ne remplit pas le vecteur. Le processeur ne peut
pas détecter des adresses illégales, car elles sont dans une zone de
mémoire vraiment allouée.
[...]
Dans mes propres classes de tableau, il y a actuellement trois
possibilités prévues :
[] échec de l'assertion en cas d'erreur
at() exception en cas d'erreur, et
unsafeAt() pas de vérification, pour le cas où le profiler dit
qu'il faut.
Je sais bien que nous n'avons pas la même définition de « assert »,
mais si ton []/assert détecte quelque chose, c'est qu'il y a une
erreur dans ton programme non ?
Ne serait-ce pas mieux que ton [] lève une exception (genre du type
EncoreUnBogue), que tu pourrais capter afin de ne pas simplement
laisser le programme s'arrêter ?
En fait, pour mes élèves, en mode debug, [] fait comme at. Je trouve
que c'est raisonnable. Vraiment si on a le moindre doute, je crois
qu'il faut utiliser at... et capter les exceptions !
Dans news:,De point de vue de l'exception safety, c'est beaucoup moins
dangereux. Parce qu'avec les bibliothèques dont je me sers
professionnellement actuellement, [nbElem] provoque un échec d'une
assertion. Pas de problème d'exception safety, mais ce n'est pas une
solution pratique pour que l'application marche non plus.
Est-ce que faire un assert est vraiment permis (dans un mode
production, en particulier) ?
Il me semble que la norme donne des garanties sur un certain nombre de
choses, par exemple sur l'existence des éléments alloués. Même si je
ne vois comment faire autrement), il me semble que ceci ne devrait pas
donner d'erreur (d'aucune sorte), en ce sens qu'il s'agit d'un code
vraiment sans danger :
vector<int> v;
v.reserve(100);
int* premier= &v[0];
int* dernier= &v[99];
Les pointeurs premier et dernier pourraient être utiles pour une
raison ou une autre. On ne voudrait probablement jamais les
déréférencer. De toute façon, *premier et *dernier devrait être sans
danger, même si on ne remplit pas le vecteur. Le processeur ne peut
pas détecter des adresses illégales, car elles sont dans une zone de
mémoire vraiment allouée.
[...]Dans mes propres classes de tableau, il y a actuellement trois
possibilités prévues :
[] échec de l'assertion en cas d'erreur
at() exception en cas d'erreur, et
unsafeAt() pas de vérification, pour le cas où le profiler dit
qu'il faut.
Je sais bien que nous n'avons pas la même définition de « assert »,
mais si ton []/assert détecte quelque chose, c'est qu'il y a une
erreur dans ton programme non ?
Ne serait-ce pas mieux que ton [] lève une exception (genre du type
EncoreUnBogue), que tu pourrais capter afin de ne pas simplement
laisser le programme s'arrêter ?
En fait, pour mes élèves, en mode debug, [] fait comme at. Je trouve
que c'est raisonnable. Vraiment si on a le moindre doute, je crois
qu'il faut utiliser at... et capter les exceptions !
Non, parce qu'une exception execute du code. Appeler les destructeurs
sur des objets où l'invariante n'est plus respecter peut faire des
dégats qu'il vaut mieux éviter.
Non, parce qu'une exception execute du code. Appeler les destructeurs
sur des objets où l'invariante n'est plus respecter peut faire des
dégats qu'il vaut mieux éviter.
Non, parce qu'une exception execute du code. Appeler les destructeurs
sur des objets où l'invariante n'est plus respecter peut faire des
dégats qu'il vaut mieux éviter.
wrote:Non, parce qu'une exception execute du code. Appeler les destructeurs
sur des objets où l'invariante n'est plus respecter peut faire des
dégats qu'il vaut mieux éviter.
Je suis dubitatif à ce sujet.
J'ai l'intuition qu'il y a des cas d'utilisation où il vaut mieux tant bin
que mal essayer de se rattraper aux branches pour exécuter du code de
sortie de programme que d'arrêter brutalement.
Même si dans certains cas c'est peine perdu, il y aura quand même
quelques cas où ce code s'exécute correctement, et rien que pour ces
cas, ça peut en valoir le coup.
kanze@gabi-soft.fr wrote:
Non, parce qu'une exception execute du code. Appeler les destructeurs
sur des objets où l'invariante n'est plus respecter peut faire des
dégats qu'il vaut mieux éviter.
Je suis dubitatif à ce sujet.
J'ai l'intuition qu'il y a des cas d'utilisation où il vaut mieux tant bin
que mal essayer de se rattraper aux branches pour exécuter du code de
sortie de programme que d'arrêter brutalement.
Même si dans certains cas c'est peine perdu, il y aura quand même
quelques cas où ce code s'exécute correctement, et rien que pour ces
cas, ça peut en valoir le coup.
wrote:Non, parce qu'une exception execute du code. Appeler les destructeurs
sur des objets où l'invariante n'est plus respecter peut faire des
dégats qu'il vaut mieux éviter.
Je suis dubitatif à ce sujet.
J'ai l'intuition qu'il y a des cas d'utilisation où il vaut mieux tant bin
que mal essayer de se rattraper aux branches pour exécuter du code de
sortie de programme que d'arrêter brutalement.
Même si dans certains cas c'est peine perdu, il y aura quand même
quelques cas où ce code s'exécute correctement, et rien que pour ces
cas, ça peut en valoir le coup.
wrote:Non, parce qu'une exception execute du code. Appeler les
destructeurs sur des objets où l'invariante n'est plus respecter
peut faire des dégats qu'il vaut mieux éviter.
Je suis dubitatif à ce sujet.
J'ai l'intuition qu'il y a des cas d'utilisation où il vaut mieux tant
bin que mal essayer de se rattraper aux branches pour exécuter du code
de sortie de programme que d'arrêter brutalement.
Même si dans certains cas c'est peine perdu, il y aura quand même
quelques cas où ce code s'exécute correctement, et rien que pour ces
cas, ça peut en valoir le coup.
kanze@gabi-soft.fr wrote:
Non, parce qu'une exception execute du code. Appeler les
destructeurs sur des objets où l'invariante n'est plus respecter
peut faire des dégats qu'il vaut mieux éviter.
Je suis dubitatif à ce sujet.
J'ai l'intuition qu'il y a des cas d'utilisation où il vaut mieux tant
bin que mal essayer de se rattraper aux branches pour exécuter du code
de sortie de programme que d'arrêter brutalement.
Même si dans certains cas c'est peine perdu, il y aura quand même
quelques cas où ce code s'exécute correctement, et rien que pour ces
cas, ça peut en valoir le coup.
wrote:Non, parce qu'une exception execute du code. Appeler les
destructeurs sur des objets où l'invariante n'est plus respecter
peut faire des dégats qu'il vaut mieux éviter.
Je suis dubitatif à ce sujet.
J'ai l'intuition qu'il y a des cas d'utilisation où il vaut mieux tant
bin que mal essayer de se rattraper aux branches pour exécuter du code
de sortie de programme que d'arrêter brutalement.
Même si dans certains cas c'est peine perdu, il y aura quand même
quelques cas où ce code s'exécute correctement, et rien que pour ces
cas, ça peut en valoir le coup.