Как получить псевдоним «constexpr and runtime»
Constexpr может быть полезен для оптимизации компиляции. Например...
strlen(char*)
Может быть скомпилирован с использованием ....
constexpr inline size_t strlen_constexpr(char* baseChar) {
return (
( baseChar[0] == 0 )
?(// if {
0
)// }
:(// else {
strlen_constexpr( baseChar+1 ) + 1
)// }
);
}
Что дает ему стоимость времени выполнения "0" при оптимизации ... Но более чем в 10 раз медленнее во время выполнения
// Test results ran on a 2010 macbook air
--------- strlen ---------
Time took for 100,000 runs:1054us.
Avg Time took for 1 run: 0.01054us.
--------- strlen_constexpr ---------
Time took for 100,000 runs:19098us.
Avg Time took for 1 run: 0.19098us.
Существуют ли какие-либо макросы / шаблоны, где вместо них можно использовать одну унифицированную функцию? то есть.
constexpr size_t strlen_smart(char* baseChar) {
#if constexpr
... constexpr function
#else its runtime
... runtime function
}
Или какой-то перегрузочный хак, который позволил бы следующее
constexpr size_t strlen_smart(char* baseChar) {
... constexpr function
}
inline size_t strlen_smart(char* baseChar) {
... runtime function
}
Замечания: Этот вопрос относится к концепции в целом. Наличие двух отдельных функций для времени выполнения и constexpr вместо приведенных в качестве примера функций.
Отказ от ответственности: Установка компилятора на -O3 (уровень оптимизации) более чем достаточна, чтобы исправить 99,9% статических оптимизаций символов, выполнив все приведенные выше примеры "бессмысленно», Но это'суть этого вопроса, как это относится к другим "Примеры"и не только.strlen