È legale in C++ di scrivere:Sta usando std :: time con std :: srand codice valido?
std::srand(std::time(nullptr));
o questo comportamento indefinito rendimento?
std::time
restituisce una std::time_t
che è un tipo aritmetico, ma a parte questo non specificato. Dalla mia comprensione, il tipo aritmetico è uno qualsiasi dei tipi in virgola mobile, intero e carattere.
std::srand
prende uno unsigned int
come valore di inizializzazione.
Pertanto, penserei che non è possibile eseguire rigorosamente questa conversione. Ho letto che su sistemi conformi a POSIX che std::time_t
è integrale ed è il numero di secondi da 00:00, 1 gennaio 1970 UTC. In questo caso, la conversione può comportare la conversione da firmato a non firmato, che è una conversione definita dall'implementazione, ma dovrebbe essere OK, e da un integrale più grande a un tipo integrale più piccolo che va bene anche per il seme.
Un tipo aritmetico può essere convertito in un 'unsigned int' utilizzando una o più regole di conversione standard. –
Considerando che 'rand' è in procinto di essere deprecato a favore della nuova intestazione' ', non perderò il sonno. –