Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-12-2003, 09:42   #1
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
C++ Guru della Settimana #1

Prendendo spunto dall'analogo appuntamento che si svolge sul newsgroup comp.lang.c++.moderated, proviamo a proporre lo stesso "gioco" qui sul forum di HWUpgrade.

L'idea e' di presentare a tutti un quesito di C++ che esplori un problema o una curiosita' legata al linguaggio.
Tutti sono invitati a provare a rispondere al quesito e trovare la soluzione, discutendone assieme. Dopo qualche giorno vi presentero' la soluzione e potremo commentarla.

Se l'idea vi piace e prende piede, potremmo farlo diventare un appuntamento regolare e magari chiedere ai moderatori un forum apposito.

Se avete idee su quesiti da proporre, contattatemi pure in PM.

Quesito #1.

Dato il seguente pezzo di codice:

Codice:
class A
{
public:

	A(void)
	  : b(10)
	  , a(b + 1)
	{
	}

	int a;
	int b;
};

void main(void)
{
	A obj;

	printf("a = %d\nb = %d\n", obj.a, obj.b);
}
Quale sara' l'output del programma al termine dell'esecuzione di main()?
Giustificate la risposta.

Ultima modifica di fek : 18-12-2003 alle 11:47.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 11:25   #2
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Ma scusa, lo compilo, lo eseguo e te lo dico E poi perchè solo C??
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 11:29   #3
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da cn73
Ma scusa, lo compilo, lo eseguo e te lo dico E poi perchè solo C??
Cosi' non vale pero'
E poi il bello e' capire il perche' dell'output che vedi e se l'output non e' quello atteso, come correggere il codice per renderlo tale.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 11:31   #4
Molz
Member
 
Iscritto dal: May 2003
Messaggi: 119
Nn ho la minima idea d qello ke stampi,

ma andando a intuito direi

a = un numero a caso
b = 10

Nn kiedetemi xké
Molz è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 12:20   #5
~Blissard~
Senior Member
 
L'Avatar di ~Blissard~
 
Iscritto dal: Mar 2003
Città: Genova
Messaggi: 4333
Dunque...dunque

class A
{
public:

A(void) : b(10) , a(b + 1){}

int a;
int b;
};

void main(void)
{
A obj;

printf("a = %d\nb = %d\n", obj.a, obj.b);
}


Direi questo la classe A ha un costruttore di default che imposta il dato b = 10 e il dato a = 11, nel main l'oggetto di tipo A chiamato obj direi che assume per default questi valori dato che al costruttore non ne vengono passati di diversi; l'output dovrebbe essere:

a = 11
b = 10

giusto?
__________________
.::. Steam: ~Blissard~ .::. Origin: Blissard79 .::. BNet: Blissard#2740 .::.
~Blissard~ è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 12:35   #6
~Blissard~
Senior Member
 
L'Avatar di ~Blissard~
 
Iscritto dal: Mar 2003
Città: Genova
Messaggi: 4333
Ripensandoci il valore di a non è così scontato potrebbe anche fare cose strane e non venire inizializzato realmente....
__________________
.::. Steam: ~Blissard~ .::. Origin: Blissard79 .::. BNet: Blissard#2740 .::.
~Blissard~ è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 12:40   #7
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Ok, piccolo suggerimento.
Il valore non e' scontato, ma il comportamento si'. Nel senso che il comportamento e' ben definito nello standard C++.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 13:56   #8
downloader
Senior Member
 
L'Avatar di downloader
 
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
Scusate... io la butto lì...

Gia è assai che il compilatore non vi sputi in faccia!

C'ho preso?
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult.
downloader è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 14:03   #9
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
il valore di a dovrebbe essere il valore che era presente nella cella di memoria prima della definizione di a maggiorato di un'unità...
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 14:13   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Siamo sicuri che non sia dipendente dal compilatore ?

Il mio prof di informatica 1 diceva sempre che nel programmare in C++ è sbagliato fare presupposizione sull'ordine di valutazione da parte del compilatore di espressioni a pari priorità (in questo caso b(10) e a(b + 1), oppure anche i due parametri di un operatore)...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 14:36   #11
downloader
Senior Member
 
L'Avatar di downloader
 
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
Quote:
Originariamente inviato da Molz
Nn ho la minima idea d qello ke stampi,

ma andando a intuito direi

a = un numero a caso
b = 10

Nn kiedetemi xké


Non è che hai eseguito e non hai capito il risultato???

Comunque è giusto. Anche se nn è una questione di priorità...
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult.
downloader è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 14:55   #12
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da downloader
Scusate... io la butto lì...

Gia è assai che il compilatore non vi sputi in faccia!

C'ho preso?
No, il compilatore con quel codice sa esattamente quello che sta facendo e produce un risultato in linea con lo standard C++.

Un altro indizio, qual e' l'ordine di valutazione delle due istruzioni di inizializazione nel costruttore?
E random? Dipende dal compilatore? E' sempre lo stesso? Perche'?

Il risultato cambia se scrivo invece questo?

Codice:
class A
{
public:

	A(void)
	  : b(10)
	  , a(b + 1)
	{
	}

	int b;
	int a;
};

void main(void)
{
	A obj;

	printf("a = %d\nb = %d\n", obj.a, obj.b);
}
fek è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 14:55   #13
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
Re: C++ Guru della Settimana #1

Quote:
Originariamente inviato da fek
Codice:
class A
{
public:

	A(void)
	  : b(10)
	  , a(b + 1)
	{
	}

	int a;
	int b;
};

void main(void)
{
	A obj;

	printf("a = %d\nb = %d\n", obj.a, obj.b);
}
.
a = Il valore standard del compilatore x gli int
b = 1

Perche:
Perche a nn è inizializzato.

IMHO






__________________
Gnu/Linux User

Ultima modifica di Luc@s : 18-12-2003 alle 15:38.
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 15:00   #14
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
Quote:
Originariamente inviato da fek
Il risultato cambia se scrivo invece questo?
No, nn importa l'ordine delle variabili ma come le inizializzi nel costruttore.
Finche nn sappiamo cosa è a , b sara sempre 1


IMHO
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 16:11   #15
pela
Member
 
Iscritto dal: Jul 2003
Città: pisa
Messaggi: 141
l'inizializzazione viene nell'ordine in cui sono dichiarati a e b all'interno nella classe, per cui nel primo caso a viene un numero a caso perché b non è ancora stato inizializzato; se invece cambio l'ordine come nel secondo esempio avrò a=11 b=10
pela è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 16:19   #16
downloader
Senior Member
 
L'Avatar di downloader
 
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
Quote:
Originariamente inviato da pela
l'inizializzazione viene nell'ordine in cui sono dichiarati a e b all'interno nella classe, per cui nel primo caso a viene un numero a caso perché b non è ancora stato inizializzato; se invece cambio l'ordine come nel secondo esempio avrò a=11 b=10
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult.
downloader è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 16:20   #17
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
Quote:
Originariamente inviato da downloader
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 16:21   #18
downloader
Senior Member
 
L'Avatar di downloader
 
Iscritto dal: Nov 2003
Città: Napoli
Messaggi: 6193
Quote:
Originariamente inviato da Luc@s
intendevo che secondo me nn è così...
__________________
Diablo3 PF | MyPC(liquidato) - Case Corsair Obsidian 800D / PSU Enermax Galaxy 1000W / MB GA-EX58A-UD7 / CPU Intel I7 920 [email protected] / MEM Corsair Dom. GT@1680mhz / GPU R9 290X / HD 2xWD 150GB raid 0/ SO - Windows 7 Ult.
downloader è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 16:24   #19
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
Quote:
Originariamente inviato da downloader
intendevo che secondo me nn è così...
Quindi avrei ragione io???
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2003, 16:26   #20
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da pela
l'inizializzazione viene nell'ordine in cui sono dichiarati a e b all'interno nella classe, per cui nel primo caso a viene un numero a caso perché b non è ancora stato inizializzato; se invece cambio l'ordine come nel secondo esempio avrò a=11 b=10
Bingo! Risposta esatta

Nel primo caso il compilatore produce un costruttore che assomiglia a:

Codice:
int a;
int b;

// [...]

{
  a = b + 1;
  b = 10;
}
Si puo' chiaramente notare come il valore di b e' indefinito quando viene eseguita la prima inizializzazione, quindi il valore di a e' anch'esso indefinito.

Mentre nel secondo caso il costruttore assomiglia a:

Codice:
int b;
int a;

// [...]

{
  b = 10;
  a = b + 1;
}
Da cui e' ovvio che a e b assumono rispettivamente valore 10 e 11.

Questo comportamento e' dettato dallo standard C++ e va implementato cosi' da ogni compilatore conforme.

Detto questo, si impara che e' buona abitudine non usare gli inizializzatori quando il valore di un membro della classe dipende dal valore di uno o piu' membri della classe. Usare normale codice nel costruttore. Questo vale anche quando di mezzo ci sono chiamate a costruttori di classi padri

In tutti gli altri casi e' buona norma abituarsi a usare gli inizializzatori che aiutano a scrivere codice piu' pulito e leggible.

Se vi e' piaciuto, fra qualche giorno propongo un altro quesito.
fek è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Anthropic ha un'AI che trova falle in Wi...
I 10 migliori sconti Amazon del weekend:...
Con un coupon scendono ancora: le super ...
Minimo storico per Samsung Galaxy S26 Ul...
Si è conclusa la missione lunare ...
EK Waterblock si arrende agli aumenti, i...
Geekbench si aggiorna: tutti i test con ...
Per la prima volta un computer quantisti...
Telecamere Reolink 4K su Amazon: Wi-Fi 6...
Anthropic vuole farsi i chip da sola? Co...
Il fondatore di Framework: il personal c...
JBL Live Flex 3 a 129€ su Amazon: ANC ad...
Come un uomo ha costruito un'azienda da ...
Multe fino a 400 euro anche se hai pagat...
Tapo lancia una valanga di offerte su Am...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:53.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v