Ho una classe molto semplice, denominata Basic, utilizzata in quasi tutti gli altri file in un progetto più grande. In alcuni casi, è necessario eseguire l'output di debug, ma in modalità di rilascio, questo non deve essere abilitato ed essere un NOOP.Prestazioni C++, compilatore ottimizzante, funzione vuota in .cpp
Attualmente è presente una definizione nell'intestazione, che attiva o disattiva un pulsante, a seconda dell'impostazione. Quindi questo è sicuramente un NOOP, quando spento. Mi chiedo, se ho il seguente codice, se un compilatore (MSVS/gcc) è in grado di ottimizzare la chiamata di funzione, in modo che sia di nuovo un NOOP. (Facendo ciò, lo switch potrebbe essere in .cpp e lo switching sarà molto più veloce, compilare/link time saver).
--Header--
void printDebug(const Basic* p);
class Basic {
Basic() {
simpleSetupCode;
// this should be a NOOP in release,
// but constructor could be inlined
printDebug(this);
}
};
--Source--
// PRINT_DEBUG defined somewhere else or here
#if PRINT_DEBUG
void printDebug(const Basic* p) {
// Lengthy debug print
}
#else
void printDebug(const Basic* p) {}
#endif
Devil's advocate: non copre un'alta percentuale di domande su questo sito? Perché le persone vengono qui? Perché loro non lo sanno. E perché o non sanno come scoprirlo (in questo caso forse non parlano assemblea), o sono troppo pigri o frettolosi per farlo. Meta-domanda: vogliamo escludere le persone pigre/frettolose e rispondere solo a chi non lo sa veramente? Alcuni potrebbero essere scocciati dalle FAQ (e possono saltarli); alcuni potrebbero assaporare le pinte di nuovo e di nuovo per fondamentalmente la stessa domanda. L'OP dovrebbe aver cercato almeno questo sito (o google), anche se – Mawg
@mawg. Copre molti degli usi di questo sito, ed è mia opinione che probabilmente il 50% delle domande pubblicate qui non dovrebbe essere richiesto. Questo in particolare viene ripetutamente richiesto e la mia risposta è quella onesta: non possiamo dire cosa farà il vostro ottimizzatore con il vostro codice, solo voi potete farlo. –
(-1) Quindi la tua risposta non è veramente "utile" per l'utente. In realtà non hai risposto alle loro domande, indipendentemente dal fatto che fosse una domanda appropriata o meno. In realtà, non hai votato per chiudere come duplicato. Se chiedo "cosa è 2 + 2" e dici "capisci da solo" non sei * utile * e non sei * corretto *. È vero che dovrei capirlo da solo, ma non mi hai risposto *. La tua risposta dovrebbe essere un commento. – DevinB