onko nopeuseroa?
Tällä
//ennen mainia: int y = 9; //funktiossa funktio(int x){ for(int i=0; i<x-y; i++){ std::cout << i << "\n"; } }
tai tällä:
//ennen mainia: int y = 9; //funktiossa funktio(int x){ int erotus = x-y; for(int i=0; i<erotus; i++){ std::cout << i << "\n"; } }
Teoriassa eroa on, jos et käytä optimointilippuja. Tällöinkin kannattaa muistaa, että vähennyslasku on äärimmäisen nopea operaatio verrattuna tulostuksesta aiheutuviin funktiokutsuihin ja luvun muuttamiseen tekstiksi puhumattakaan todellisista tapahtumista kuten tekstin piirtämisestä ruudulle tai tallentamisesta kovalevylle. Käytännössä eroa tuossa tapauksessa on jokunen miljoonasosa.
Oikeassa elämässä sitten käytetään optimointilippuja, joista jo yksinkertaisin (gcc -O) poistaa melkoisen joukon tyhmyyksiä ja optimoi esimerkiksi tuon järkevästi. On tietenkin mahdollista, että silmukassa on sellaisia asioita, jotka voivat muuttaa tuossa y:n arvoa (tai joista ei tiedetä, tekevätkö ne sen), jolloin optimointia ei voi tehdä.
Tuon tyyppiset omat "optimoinnit" yleensä aiheuttavat enemmän harmia kuin hyötyä, ja usein liika yrittäminen jopa hidastaa koodia. Kannattaa panostaa järkevään toteutukseen suuremmissa linjoissa ja hyvään ohjelmointitapaan ja jättää virittely kääntäjän huoleksi.
Oikea vastaus on: kokeile ja mittaa. Olettaen, että y ei oikeasti ole vakio, vaan jonkinasteinen globaali muuttuja, jota muutetaan useammasta paikasta tai jopa useammasta säikeestä, niin ennakkolaskenta voi olla nopeampaa, koska kääntäjä ei välttämättä voi/osaa/saa olettaa, että y pysyisi vakiona jokaisella silmukan suorituskerralla. Jos ennakkolaskentaan liittyy funktiokutsuja niin ennakkolaskenta on lähes poikkeuksetta nopeampaa. Mutta kuten Metabolix sanoi, kannattaa optimoida vain asioita, jotka vaativat optimointia eikä turhaan sekoittaa kaikkea koodia sekavilla optimoinneilla. Toisaalta tietyissä tapauksissa sijoittamalla hankala ennakkolaskenta kuvaavan nimiseen muuttujaan voidaan jopa parantaa koodin luettavuutta.
Itse käytän mielelläni "ylimääräisiä" kuvaavan nimisiä muuttujia juurikin koodin luettavuuden parantamiseen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.