Я не смог найти ответ через поиск, поэтому следующий шаг - это запрос. Скажем, у меня есть такой код:
template<class Int>
inline Int onbit(Int value, int n) {
return value | (static_cast<Int>(1) << n);
}
Если я назову код, такой как onbit(A, 4)
, будет ли константа 4
распространена и оптимизирована, или я должен сделать ее шаблоном (template<int n, class Int>
), чтобы она была постоянной. Является ли C ++ 0x constexpr здесь необходимым, и если да, то как именно я должен его использовать (должен int n
быть const или constexpr?).
Я знаю, что constexpr будет работать с постоянными параметрами, но будет ли он частично оптимизирован, если часть параметров будет постоянной, а часть - переменной?
Резюме: Возможно ли, чтобы функция (она должна быть встроенной, верно?) Была частично оптимизирована с постоянным распространением, и, если да, каковы требования для этого?
Даже когда я пишу это, я думаю, что вызов встроенной функции будет распространять константы ...