Voglio scrivere una funzione template che fa qualcosa con un std::stack<T>
e un'istanza di T
, ad esempio:Un buon compilatore C++ ottimizzerà un riferimento?
template<class StackType> inline
bool some_func(StackType const &s, typename StackType::value_type const &v) {
// ...
}
La ragione per cui mi passa v
per riferimento è ovviamente quello di ottimizzare per il caso in cui StackType::value_type
è un struct
oppure class
e non copiare un intero oggetto in base al valore.
Tuttavia, se StackType::value_type
è un tipo "semplice" come int
, è ovviamente meglio passarlo semplicemente in base al valore.
La domanda è: per un tipo come int
che diventerebbe int const&
come argomento formale nella funzione precedente, il compilatore ottimizzerà il riferimento e lo passerà semplicemente in base al valore?
che sarebbe un cattivo compilatore. – lapk
Se il compilatore decide effettivamente di incorporare la funzione, farà sicuramente la cosa più efficace, indipendentemente da come la definisci. – enobayram