SORU
31 Temmuz 2015, Cuma


Başlatılmamış yerel değişken hızlı rasgele sayı üreteci.

Başlatılmamış yerel değişken tanımsız davranış olduğunu biliyorumİKve ayrıca değeri olabilir tuzak beyan eden etkileyebilir başka bir işlem, ama bazen kullanmak istiyorum rasgele sayı için görsel ve fazla kullanımı diğer kısmı program, örneğin, ayarlanmış bir şey ile rastgele renkli bir görsel efekt, örneğin:

void updateEffect(){
    for(int i=0;i<1000;i  ){
        int r;
        int g;
        int b;
        star[i].setColor(r%5,g%5,b%5);
        bool isVisible;
        star[i].setVisible(isVisible);
    }
}

bu daha hızlı olur

void updateEffect(){
    for(int i=0;i<1000;i  ){
        star[i].setColor(rand()%5,rand()%5,rand()%5);
        star[i].setVisible(rand()%2==0?true:false);
    }
}

ve ayrıca daha hızlı diğer rasgele sayı üreteci.

CEVAP
31 Temmuz 2015, Cuma


Diğerleri belirttiği gibi, bu Tanımsız Davranış (SNS).

Uygulamada, o (muhtemelen) aslında (tür). Okuma başlatılmamış bir kayıt 86[-64] mimarileri edecek son derece kaliteli çöp sonuçları, ve muhtemelen istemiyorum kötü (karşıt olarak, örneğin, Sürüm, nerede registers can be flagged as invalid, böylece okur yaymak hataları gibi NaN).

İki ana problem vardır:

  1. Özellikle rastgele olmayacak.Bu durumda, yığın okuyorsun, orada ne varsa, önceden alacaksın. Etkili bir şekilde rastgele, tamamen yapılandırılmış olabilir, şifre, on dakika önce, ya da büyükannenin kurabiye tarifini girdi.

  2. Kötü ('B') . Sermaye uygulama kodunuzu bu sürüngen gibi şeylere izin vermek. Teknik olarak, derleyici tanımlanmamış bir değişken okumak reformat_hdd(); her zaman takın.olmazyine de yapmamalısın. Güvenli olmayan şeyler yapmaz. Ne kadar az istisnalar yapmak, daha güvenli tesadüfi hatalardantümzaman.

    İK ile daha önemli bir mesele tüm programın davranışı tanımsız yapar. Modern Derleyiciler bu kod veya go back in time bile büyük bozkırlarında elide için kullanabilirsiniz. İK ile oyun Victoria Mühendisi canlı bir nükleer reaktörün sökülmesi gibi. Yanlış gitmek için milyarlarca şey var, ve muhtemelen temel ilkeleri ve uygulanan teknolojinin yarısı bile anlamayacak.olabilirtamam, ama yine de bunun olmasına izin vermemeliyiz. Ayrıntılar için diğer güzel cevaplar bak.

Ayrıca, seni kovardım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • iBand IguJoo

    iBand IguJoo

    25 AĞUSTOS 2006
  • michellefeng's channel

    michellefeng

    26 Kasım 2006
  • Sam Kear

    Sam Kear

    14 Temmuz 2007