Я хочу написать шаблонную функцию, которая делает что-то с std::stack<T>
и экземпляром T
, например:Будет ли хороший компилятор C++ оптимизировать ссылку?
template<class StackType> inline
bool some_func(StackType const &s, typename StackType::value_type const &v) {
// ...
}
Причина проходит v
по ссылке, конечно, оптимизировать для случая, когда StackType::value_type
является struct
или class
, а не копировать весь объект по значению.
Однако, если StackType::value_type
является «простым» типом, например int
, то, конечно, лучше просто передать его по значению.
Вопрос такой: для типа int
, который станет int const&
как формальный аргумент в вышеуказанной функции, будет ли компилятор оптимизировать ссылку и просто передать ее по значению?
Это будет плохой компилятор. – lapk
Если компилятор действительно решает встроить функцию, она, безусловно, сделает самую эффективную вещь, независимо от того, как вы ее определяете. – enobayram