Newsgroup: it.comp.lang.c++
Titolo: Sintassi const

Ciao ragazzi.
Scusate la domanda banale, ma la doc in mio possesso non ne fa cenno.
So che, nella dichiarazione di parametri formali,
char const *s
vuol dire puntatore a caratteri "costanti", e che
char *const s
vuol dire puntatore "costante" a caratteri.
La domanda č:
const char *s
cosa vuol dire?
grazie, giulio
Per favore togliete "!RemoveMe!" dall'indirizzo per rispondere
Please remove "!RemoveMe!" from the address to reply

cosa vuol dire?
 è esattamente la stessa cosa del primo cioè: s è un puntatore ad un
carattere costante, di solito entrambe le sintassi sono accettate allora
conviene impararne una e usare sempre quella.
Ciao, Salvo.


Ho dimenticato di fare una precisazione. Fermo restando che quello che ti ho
scritto è vero, considera che se tu hai:
int a=10;
const int* p=&a; (oppure int const* p=&a;)
non vuol dire che a diventa costante infatti:
SI PUO' fare: a=100;
NON SI PUO' fare (*p)=100;
ti assicuri cioè che quello a cui punta p non può essere cambiato tramite p.

 cosa vuol dire?
E' equivalente alla prima forma.
EMG

cosa vuol dire?
e` equivalente a
char const* s
Io comunque preferisco mettere prima il const e usare "const char"
mi suona meglio anche perche` nella linqua inglese gli aggettivi
precedono i termini cui si riferiscono. Inoltre ad una
rapida lettura e` piu` difficile sbagliare e leggerlo come "puntatore
costante".
Paolo
-----------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------

 costante".
In realta' faccio anch'io come te per abitudine, ma in realta' ha
ragione chi dice che scrivendo
char const * const p;
in inglese basta leggere all'indietro: const pointer to const char...
Ciao,
Nicola

 -----------------------------------------------
P.S.
Mi sembra di aver gia' risposto in passato a una domanda di questo tipo
potrebbe essere inserita nelle faq...
-- 
A man may be so much of everything that he is nothing of anything.
		-- Samuel Johnson

ma e' possibile cambiare il contenuto dei caratteri a cui punta:
anche qui sono d'accordo ma non č quello di cui si parla sopra.
Ciao, Salvo.

 
hai ragione.
non avevo notato che l'asterisco stava comunque subito prima della s 
(avevo tagliato e incollato le due dichiarazioni dal messaggio originale
senza notare la sfumatura)
effettivamente non conoscevo questa sintassi, e non ero il solo, infatti
anche il tool cdecl di cui scrivevo prima mi da un syntax error sulla seconda forma:
cdecl> explain char const * s;
syntax error  
*Fabio*
--
algorithm, n.:
        Trendy dance for hip programmers.

 sono due dichiarazioni completamente diverse.
Da quello che scrivi dopo capisco che č stato un errore di battitura:
const char *s;
e
char const * s;
sono identici mentre
char * const s;
č diverso.
EMG

sono due dichiarazioni completamente diverse.
Attenzione la seconda e` e` char const* e non char* const...


in inglese basta leggere all'indietro: const pointer to const char...
Gia`... peccato pero` che per abitudine leggiamo da sinistra
verso destra e non avanti e indietro partendo dal mezzo!!!!
Cmq in queste cose non c'e` una verita` assoluta, sono tutte
molto soggettive.


non avevo notato che l'asterisco stava comunque subito prima della s 
Questo mi conferma che e` meglio scrivere
const char*
che
char const*
Piu` lontano e` il const da * e piu` e` facile capire che non e`
il puntatore ad essere costante!


Questo dovresti andarlo a dire a Kernighan e Ritchie, che lo dicano
anche a Stroustrup ;-)
Nicola