Should I ever include that local variable, or any local variable ever in a header?
L'unico caso a cui riesco a pensare è se si scrive una funzione inline o di un modello: per quelli, il corpo della funzione / metodo dovrebbe essere nell'intestazione. Quindi, ovviamente, anche le variabili locali sono nell'intestazione.
If not, should I ever document it in the header?
Potrebbero esserci casi rari in cui un chiamante deve essere a conoscenza di una variabile locale di una funzione. Per esempio. se lo spazio di stack è scarso e la funzione utilizza una variabile di array locale di 100k. O se si tratta di una funzione template che non crea ovviamente un'istanza del suo parametro template - quell'informazione potrebbe essere importante per il chiamante.
Ma quelli sono casi limite estremi e interpretati. Nel caso generale, l'intestazione dovrebbe documentare solo il "contratto" esterno offerto dalle funzioni, comportamento a cui il chiamante può fare affidamento anche nelle future versioni del codice.
I guess another way to ask this, is if a variable that I am using is only used in one function; should I always just make it a local variable, or are there cases where that variable should be made a member?
Come ha detto @Bandandin: lo faresti membro, se hai la necessità di preservare lo stato tra chiamate diverse.
Tuttavia, potrebbe essere un progetto più pulito dividere quel membro e quella funzione in una classe separata e avere invece un membro di quella classe:
class BarState
{
private:
bool localFlag;
public:
void Bar();
// or even:
void operator()();
};
class Foo
{
BarState bar;
};
In questo modo è chiaro che:
- la "funzione"
Bar
mantiene lo stato tra le chiamate
- il membro
localFlag
è inteso come privato a Bar