2014-09-25 18 views
6

Bir işlevin içinde srand() numaralı telefonu aradığınızda, bu işlevin içinde yalnızca rand() tohum mu çalıyor?srand() kapsamı C++

'un çağrıldığı main işlevi buradadır. rand() kullanılan

int main(){ 
    srand(static_cast<unsigned int>(time(0))); 

    random_number(); 
} 

void random_number(){ 
    rand(); 
} 

işlev random_numbersrand() adlandırılan yerin dışında.

Benim soru - Eğer srand() denilen yerin seribaşı rand() dışında kullanabilirsiniz, srand() kullanarak rand() tohuma ise? Fonksiyonlar, farklı dosyalar, vb. Dahil.

cevap

9

srand C++ C kütüphanesi için C standardına geri düşüyor çünkü biz C standardına başvurabileceğiniz draft C99 standard giderek görebilirsiniz küresel yürürlükte olduğu fonksiyonları ve diyor (vurgu madeni): srand Rasgeleymiş sayılar yeni dizisi için bir tohum olarak bağımsız değişken kullanır

subs tarafından döndürülecek numaralı randevu çağrıları. Daha sonra aynı tohum değerine sahip iplikçik adı verilirse, sözde rastgele sayıların sırası tekrarlanır. srand için bir arama işleminin yapılmasından önce Rand adlandırılır, aynı sıra srand ilk Bu kapsamda o kadar etkisini kısıtlamaz 1.

bir tohum değeri çağrıldığında olarak üretilecektir

static unsigned long int next = 1; 

void srand(unsigned int seed) 
{ 
    next = seed; 
} 
: kullanıldı, sadece o yapar daha açık etkinin küresel olduğunu rand

taslak standardında verilen taşınabilir uygulama örneği için sonraki aramaları etkiler diyor