Ottimo, grazie Rising1.
Curiosità: perché non si può eseguire la srand() in un iterazione, ma va posta prima di questa?
Ottimo, grazie Rising1.
Curiosità: perché non si può eseguire la srand() in un iterazione, ma va posta prima di questa?
srand reinizializza il generatore di numeri casuali con il seed specificato. Se come seed usi il tempo di sistema e lo esegui in un ciclo, succede che lo reinizializzi ogni volta allo stesso valore (a meno che non capiti "sul bordo" di un secondo), per cui la rand() ti darà sempre in output lo stesso numero.Originariamente inviato da signoredeltempo
Curiosità: perché non si può eseguire la srand() in un iterazione, ma va posta prima di questa?
... ma tra l'altro, perché passi una std::string per puntatore?![]()
Amaro C++, il gusto pieno dell'undefined behavior.
Capito, grazie.Originariamente inviato da MItaly
srand reinizializza il generatore di numeri casuali con il seed specificato. Se come seed usi il tempo di sistema e lo esegui in un ciclo, succede che lo reinizializzi ogni volta allo stesso valore (a meno che non capiti "sul bordo" di un secondo), per cui la rand() ti darà sempre in output lo stesso numero.
Per evitare che ne venga fatta una copia, ma questo lo sai, quindi a cosa alludi?Originariamente inviato da MItaly
... ma tra l'altro, perché passi una std::string per puntatore?![]()
volendo puoi fare una chiamata per indirizzoOriginariamente inviato da signoredeltempo
Capito, grazie.
Per evitare che ne venga fatta una copia, ma questo lo sai, quindi a cosa alludi?
codice:void f(int &x); f(x); //è lo stesso di void f(int* x); f(&x); //ma nel primo caso non devi trattare x come puntatore ma come oggetto
Avevo pensato anche al passaggio per riferimento, poi ho optato per il passaggio per *.
Tanto alla fine il discorso è quello.
![]()
In C++ è idiomatico usare "i reference quando si può, i puntatori quando si deve", dato che i reference lasciano meno ambiguità - se passi un puntatore non è necessariamente chiaro, ad esempio, chi deve deallocare l'oggetto in questione, o se è concesso passare NULL; inoltre, la sintassi per maneggiare oggetti puntati è più contorta (la versione corretta del tuo sourcePtr[rand() % sourcePtr->length()] sarebbe (*sourcePtr)[rand() % sourcePtr->length()]).Originariamente inviato da signoredeltempo
Per evitare che ne venga fatta una copia, ma questo lo sai, quindi a cosa alludi?
Per questo motivo se tutto quello che si vuole è evitare la copia di solito si passa per const reference (in modo da evitare sia la copia sia che l'oggetto sia modificato nella funzione).
Amaro C++, il gusto pieno dell'undefined behavior.