Se ho alcune equazioni matematiche che si basano su input che possono essere zero o non-zero (argomento template, noto al momento della compilazione), l'ottimizzatore valuterà le equazioni e ottimizzerà le espressioni che sa valuterà a 0 o 1.Un ottimizzatore dedurrà espressioni matematiche basate su costanti in fase di compilazione?
Ad esempio:
double x = y * Eval<type>::value;
se Eval<type>::value
è 0
, x
sarà sempre 0
.
double x = exp(y * Eval<type>::value);
se Eval<type>::value
è 0
, x
sarà sempre 1
.
L'ottimizzatore può calcolare questo e sostituirecon 0
o 1
altrove nel codice o questi calcoli verranno eseguiti in fase di esecuzione?
Sto usando gcc 4.7 con -O3
Se si ha familiarità con il montaggio, si può solo guardare l'output per quella determinata. – Mysticial
Scommetto che potresti persino costringerlo a farlo in fase di compilazione con abbastanza trucchetti (SFINAE e quant'altro). – Lalaland
L'unica risposta veramente corretta che può essere data alle domande di questo modulo è "è permesso, ma non è richiesto a". In questo caso, aggiungi una zuppa di "il compilatore di solito non può fare molta ottimizzazione algebrica sui calcoli in virgola mobile a meno che tu non usi l'opzione 'vai avanti e ottimizzi per la velocità a scapito dell'opzione * correctness *'." – zwol