Newsgroup: it.comp.lang.c++
Titolo: reference bounding / default parameters

Ho sempre considerato la sintassi
	A & a( b );
come equivalente a
	A & a = b;
Ed ho sempre pensato fosse consentita dallo standard.
Oggi, dovendo compilare sotto VC++6 alcune cose che avevo realizzato sotto
altre piattaforme, ho scoperto che la prima forma non è accettata da
compilatore. Lo standard la prevede o no?
Altra cosa:
Ripetere i defaut parameters nella definizione di una funzione è
violazione dello standard ?
Il gcc me lo consente, il VC++ no.
Max

 wrote in message news:Pine.LNX.4.10.99122...@c64.comm2000.it...
:Ho sempre considerato la sintassi
:A & a( b );
:come equivalente a
:A & a = b;
:
:Ed ho sempre pensato fosse consentita dallo standard.
:
:Oggi, dovendo compilare sotto VC++6 alcune cose che avevo realizzato sotto
:altre piattaforme, ho scoperto che la prima forma non č accettata da
:compilatore. Lo standard la prevede o no?
Non mi pare, giudicando da 8.5 sub 1.
: Ripetere i defaut parameters nella definizione di una funzione č
: violazione dello standard ?
Si`, e` una violazione dello standard.
: Il gcc me lo consente, il VC++ no.
Hai provato a girare gcc con -Wall -pedantic?  Mi pare che renda
piu` precise e pedantiche le sue diagnostiche d'errore (non so,
pero`, se spegne tutte le sue varie estensioni non-standard).
Alex

 
Avevo provato con -Wall e non diceva nulla. Con --pedantic in effetti
emette un warning. La compilazione fallisce soltanto se i valori
specificati sono diversi da quelli della dichiarazione.
Max

 pero`, se spegne tutte le sue varie estensioni non-standard).
:
: Avevo provato con -Wall e non diceva nulla. Con --pedantic in effetti
: emette un warning. La compilazione fallisce soltanto se i valori
: specificati sono diversi da quelli della dichiarazione.
Qui, fortunatamente, la ragione la conosco (la spiega bene
Stroustrup in D&E); il problema di controllare se "i valori
specificati" siano o meno gli stessi, fra due specifiche
ridondanti dei default, ha in generale complessita` non
soggetta a limiti, nel modello di compilazione separata
previsto da C++.  Quindi, e` di gran lunga la miglior
soluzione quella di assoggettare la specifica dei default
alla one-definition rule che, d'altra parte, si applica gia`
a tante altre cose.
Ritengo un grave errore da parte di software "aperto", come
gcc dovrebbe essere, quello di implementare estensioni
"silenziose" agli standard (cioe` di ammettere, senza
neppure un warning, come "corretto", del codice che in
realta` viola gli standard).  Quando lo fanno i produttori
di compilatori commerciali, i maligni pensano che sia una
mossa deliberata per "catturare" i clienti; chissa` se, a
fronte della STESSA mossa da parte di software tutt'altro
che proprietario, saranno disposti invece ad ammettere che,
in un caso come nell'altro, non c'e` nessun bisogno di
pensare a chissa` quali cospirazioni; la capacita` umana
di commettere errori, anche gravi, e` vasta abbastanza
da non richiedere nessun ulteriore supporto da parte della
nostra capacita`, pur vasta anch'essa, di fare cattiverie:-).
In pratica, secondo me, gcc va SEMPRE usato con -Wall
e -pedantic, altrimenti non si sta usando davvero C++, ma
un qualche misterioso dialetto proprietarioide.  Vorrei poter
dire lo stesso di altri compilatori (tipicamente, ciascuno e`
dotato di opzioni filosoficamente analoghe), ma li` si rischia
che non funzionino piu` gli header di sistema...!-)
Alex