Data la seguente funzione, ognuna delle variabili locali sarà dichiarata nello stack?Variabili condizionali stack
std::string reallyCoolFunction(unsigned int a)
{
if(a < 20)
{
std::string result1 = "This function is really cool";
return result1;
}
if(a >=20 && a <= 40)
{
std::string result2 = "This function is kind of cool";
return result2;
}
if(a > 40)
{
std::string result3 = "This function is moderately cool";
return result3;
}
std::string result4 = "This function really isn't that cool";
return result4; // remove warning
}
In questa situazione, un solo std::string
è effettivamente necessaria, tutta fa 4 ottenere stanziati in pila, o venga assegnate solo 1?
Credo ci sia un punto importante nella mia risposta che dimentichi di menzionare - il fatto che la maggior parte la stringa non verrà allocata nello stack. Penso che valga la pena di menzionare –
@IvayloStrandjev Assolutamente - Ho messo in risalto la tua risposta proprio per questo motivo :) Lo storage automatico – dasblinkenlight
ha garantito il comportamento dello stack. questo è ciò a cui si riferisce "lo stack". "in realtà" è in realtà una parola piuttosto priva di meningi. una variabile automatica può solo evitare di essere allocata nello stack essendo ottimizzata via sotto la regola as-if, e quindi è * come se * fosse allocata sullo stack, quindi non molto significativa per fare una grande nota a riguardo. –