Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16
  1. #11
    Ottimo, grazie Rising1.
    Curiosità: perché non si può eseguire la srand() in un iterazione, ma va posta prima di questa?

  2. #12
    Originariamente inviato da signoredeltempo
    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.

    ... ma tra l'altro, perché passi una std::string per puntatore?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #13
    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.
    Capito, grazie.

    Originariamente inviato da MItaly
    ... ma tra l'altro, perché passi una std::string per puntatore?
    Per evitare che ne venga fatta una copia, ma questo lo sai, quindi a cosa alludi?

  4. #14
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    Originariamente inviato da signoredeltempo
    Capito, grazie.


    Per evitare che ne venga fatta una copia, ma questo lo sai, quindi a cosa alludi?
    volendo puoi fare una chiamata per indirizzo

    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

  5. #15
    Avevo pensato anche al passaggio per riferimento, poi ho optato per il passaggio per *.
    Tanto alla fine il discorso è quello.

  6. #16
    Originariamente inviato da signoredeltempo
    Per evitare che ne venga fatta una copia, ma questo lo sai, quindi a cosa alludi?
    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()]).

    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.