Mais pourquoi ça compile ? - C++ - Programmation
Marsh Posté le 27-08-2004 à 19:25:26
Va savoir, charles
Code :
|
compile sous vs 7.1
Marsh Posté le 27-08-2004 à 19:31:32
chrisbk a écrit : Va savoir, charles
|
ah quand meme
kad> /usr/local/bin est pas dans ton path? et pourquoi taper ./ pour le repertoire courant ?
Marsh Posté le 27-08-2004 à 19:34:54
uriel a écrit : |
Si, mais après /usr/bin qui contient le gcc par défaut de ma daubianne (2.95). Celui dans /usr/local me sert à vérifier l'état avec un g++ uptodate.
Et on ne met pas . dans son path, c'est pas hygiénique
Marsh Posté le 27-08-2004 à 19:36:14
kadreg a écrit : |
je parlais de ca:
Citation : kadreg@rincevent:~$ cat ./const.cpp |
le ./ sert pas
Marsh Posté le 27-08-2004 à 19:37:23
uriel a écrit : je parlais de ca:
|
si, à la complétion
Marsh Posté le 27-08-2004 à 19:38:01
ReplyMarsh Posté le 27-08-2004 à 19:38:50
uriel a écrit : c'est quoi ce shell moisi ? |
le bash de la debian
Marsh Posté le 27-08-2004 à 19:39:10
Bon, on se disperse pas , et on répond à la question originale
Marsh Posté le 27-08-2004 à 19:42:58
kadreg a écrit : le bash de la debian |
Ah mais je comprends maintenant que tu gueules toujours que linux c'est moisi... si t'as une debian...
Marsh Posté le 27-08-2004 à 19:44:18
Je gueule surtout contre la radasse que j'ai au bureau en fait
Marsh Posté le 27-08-2004 à 19:48:12
Kristoph a écrit : C'est du C++ valide, ce n'est pas la faute de g++ |
source ? Et pourquoi ?
Marsh Posté le 27-08-2004 à 19:49:01
Kristoph a écrit : C'est du C++ valide, ce n'est pas la faute de g++ |
bein oué c'est bizarre, pq le :: delete[] se comporte t'il comme ça?
Marsh Posté le 27-08-2004 à 19:50:13
kadreg a écrit : source ? Et pourquoi ? |
C'est ce qu'il me semble me souvenir en tout cas. Je prefere quand même attendre que Taz vienne donner son avis
Marsh Posté le 27-08-2004 à 19:50:57
Kristoph a écrit : C'est du C++ valide, ce n'est pas la faute de g++ |
oui, c'est du C++ valide. ceci est autorisé pour la simple et bonne raison que
Code :
|
est autorisé et valide.
Marsh Posté le 27-08-2004 à 19:54:28
schnapsmann a écrit : bein oué c'est bizarre, pq le :: delete[] se comporte t'il comme ça? |
tiré du stroustrup mes couilles:
l'opérateur global delete[] est implémenté avec une fonction: |
voila donc ce qui expliquerai cela
c'est pareil avec l'opérateur global delete d'ailleurs.
Marsh Posté le 27-08-2004 à 19:54:31
http://www.codeguru.com/forum/show [...] did=306213
Citation : It is perfectly legal to use delete on a const value. A value being const means that the value will not change. Operator delete does not change the value of the pointer -- it only invalidates the memory that the pointer points to. Operator delete may not change anything except some internal tables in the heap manager. |
Ca se tient ce qu'il dit.
Marsh Posté le 27-08-2004 à 19:58:10
en fait les compilos doivent gérer des opérateurs delete version const pour que ça soit cohérent au niveau "constness":
Code :
|
balise kipu qui me met un majuscule après ::
Marsh Posté le 27-08-2004 à 20:09:24
Code :
|
Faire gaffe à la position du const, ça compte.
Je sais plus la règle exacte, à voir...
Edit: et pis delete, ça change pas le contenu de s1 ni de s1[0]
Marsh Posté le 27-08-2004 à 20:11:59
pascal_ a écrit : |
JE HAIS CE LANGAGGGGEEEEEEE
Marsh Posté le 27-08-2004 à 20:22:10
pascal_ a écrit : |
ce que je critique, c'est que ça soit authorisé par un pointeur const.
Code :
|
Marsh Posté le 27-08-2004 à 20:26:34
schnapsmann a écrit : tiré du stroustrup mes couilles:
|
aors ça ça n'a rien avoir.
Marsh Posté le 27-08-2004 à 20:28:11
schnapsmann a écrit : ce que je critique, c'est que ça soit authorisé par un pointeur const. |
pourquoi ? le paramètre de delete est une copie, ça ne pose aucun problème. si tu voulais que ça marche, il faudrait que delete mette le truc à 0 pour que ça ait un sens
Marsh Posté le 27-08-2004 à 20:36:48
Taz a écrit : pourquoi ? le paramètre de delete est une copie, ça ne pose aucun problème. si tu voulais que ça marche, il faudrait que delete mette le truc à 0 pour que ça ait un sens |
okay donc delete est défini comme ça:
Code :
|
et non comme ceci:
Code :
|
comme c'est écrit dans le stroustrup
Marsh Posté le 27-08-2004 à 19:23:23
kadreg@rincevent:~$ cat ./const.cpp
int main () {
const char *s1 = new char [512];
delete [] s1;
}
kadreg@rincevent:~$ /usr/local/bin/g++ -g -Wall -o const ./const.cpp
kadreg@rincevent:~$ ./const
kadreg@rincevent:~$ /usr/local/bin/g++ --version
g++ (GCC) 3.4.1
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
kadreg@rincevent:~$
Pour quoi g++ accepte t'il de me faire un delete sur un const char * ? Un delete n'est pas considéré comme une opération pouvant modifier un élément ?
(d'ailleurs, ça ne marche pas sur le visual6, mais c'est pas une référence ...)
---------------
brisez les rêves des gens, il en restera toujours quelque chose... -- laissez moi troller sur discu !