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 + x медленнее во время выполнения
// 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% статических char оптимизаций, делая все приведенные выше примеры "бессмысленными". Но это не относится к этому вопросу, поскольку оно относится к другим "примерам", а не только к strlen
.